冒泡排序
Jihongchang(讨论 | 贡献)2022年11月8日 (二) 06:34的版本
https://www.bilibili.com/video/BV1tW4y1i7Mo
算法描述
- 首先从未排序数组的首位开始,和后面相邻的数字进行比较,如果前面一个比后面一个大,那么则进行交换。
- 接下来再将第二个位置的数字和后面相邻的数字进行比较,如果大,那么则进行交换,直到将最大的数字交换到数组的尾部
- 然后再从排序的数组的首位开始,重复前面两步,将最大的数组交换到未排序数组的尾部(交换到尾部的数字是已经排好序的)。
- 如此反复,直到排序完毕。
算法实现
分解1:将第一个数字和后面相邻的数字进行比较,如果大则进行交换
public class BubbleSort {
public static void bubbleSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
for (int e = arr.length - 1; e > 0; e--) {// 0 ~ e
for (int i = 0; i < e; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}//end for
}//end for
}//end bubbleSort
/**
* 交换 arr 的 i 和 j 位置上的值
* 相较于:
* int tmp = arr[i];
* arr[i] = arr[j];
* arr[j] = tmp;
* 的写法,节省了一个额外的空间
* @param arr
* @param i
* @param j
*/
public static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
public static void main(String[] args) {
int[] arr = new int[]{6, 8, 4, 3, 9, 7};
SelectionSort.selectionSort(arr);
System.out.print(arr[0]);
for(int i = 1; i < arr.length; i++){
System.out.print(", " + arr[i]);
}
}
}