1.冒泡排序,稳定排序。
public static void bubbleSort(int [] array){ int len = array.length; for(int i = 0; i < len - 1; ++i){ boolean canBreak = true; for(int j = 0; j < len - i - 1; ++j){ if(array[j] > array[j + 1]){ canBreak = false; swap(j, j + 1, array); } } if(canBreak) break; } }
2.插入排序,稳定排序。且当元素数组接近有序时,性能较好,为O(n)
public static void insertSort(int [] array){ int len = array.length; for(int i = len - 2; i >= 0; --i){ int insertIndex = -1; for(int j = len - 1; j >= i; --j){ if(array[i] > array[j]){ insertIndex = j; break; } } if(insertIndex == -1) continue; int temp = array[i]; for(int j = i; j < insertIndex; ++j){ array[j] = array[j + 1]; } array[insertIndex] = temp; } }
3.选择排序,非稳定排序。复杂度基本上为O(n^2)不会变,因为总要遍历一遍去寻找最大值。
public static void chooseSort(int [] array){ int len = array.length; for(int i = len - 1; i > 0; --i){ int maxIndex = 0; for(int j = 0; j <= i; ++j){ if(array[j] > array[maxIndex]) maxIndex = j; } swap(maxIndex, i, array); } }