wonner 2020-06-03
可以看出,经过一次冒泡操作之后, 6这个元素已经存储在正确的位置上。要想完成所有数据的排序,我们只要进行6次这样的冒泡操作就行了。
public static void bubbleSort(int[] arr) { if (arr.length <= 1) return; for (int i = 0; i < arr.length; i++) { boolean b = false; for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; b = true; } } if (!b) { break; } } }
public static void insertionSort(int[] arr) { int n = arr.length; if (n <= 1) { return; } for (int i = 0; i < n; i++) { int value = arr[i]; int j = i - 1; // 查找插入的位置 for (; j >= 0; --j) { if (arr[j] > value) { arr[j + 1] = arr[j];//移动数据 } else { break; } } arr[j + 1] = value;//插入数据 } }
public static void selectionSort(int[] arr) { int length = arr.length; if (length == 1) { return; } int x; for (int i = 0; i < length; i++) { x = i; for (int j = i + 1; j < length; j++) { if (arr[x] > arr[j]) { x = j; } } if(x != i){ int tmp = arr[i]; arr[i] = arr[x]; arr[x] = tmp; } } }
空间复杂度 | 是否稳定 | 最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | |
---|---|---|---|---|---|
冒泡排序 | Q(1) | 是 | Q(n) | Q(n2) | Q(n2) |
插入排序 | Q(1) | 是 | Q(n) | Q(n2) | Q(n2) |
选择排序 | Q(1) | 否 | Q(n2) | Q(n2) | Q(n2) |