插入排序
1 public static void insertSort(Comparable[] array) 2 { 3 int j = 0; 4 5 for (int i = 1; i < array.length; i++) { 6 Comparable temp = array[i]; 7 8 for (j = i; j > 0 && (temp.compareTo(array[j - 1]) < 0); j--) { 9 array[j] = array[j - 1]; 10 } 11 array[j] = temp; 12 } 13 }
归并排序
1 public static void mergeSort(Comparable[] array) 2 { 3 Comparable[] copy = new Comparable[array.length]; 4 mergeSort(array, copy, 0, array.length - 1); 5 } 6 7 8 private static void mergeSort(Comparable[] array, Comparable[] temp, int left, int right) 9 { 10 if (left < right) { 11 int middle = (left + right) >> 1; 12 mergeSort(array, temp, left, middle); 13 mergeSort(array, temp, middle + 1, right); 14 merge(array, temp, left, middle + 1, right); 15 } 16 } 17 18 19 private static void merge(Comparable[] array, Comparable[] temp, int left, int right, int rightEnd) 20 { 21 int leftEnd = right - 1; 22 int tempIdx = left; 23 int length = rightEnd - left + 1; 24 25 while (left <= leftEnd && right <= rightEnd) { 26 if (array[left].compareTo(array[right]) < 0) { 27 temp[tempIdx++] = array[left++]; 28 } 29 else { 30 temp[tempIdx++] = array[right++]; 31 } 32 } 33 34 while (left <= leftEnd) { 35 temp[tempIdx++] = array[left++]; 36 } 37 38 while (right <= rightEnd) { 39 temp[tempIdx++] = array[right++]; 40 } 41 42 for (int i = 0; i <length; i++, rightEnd--) { 43 array[rightEnd] = temp[rightEnd]; 44 } 45 }
快速排序
1 public static void quickSort(Comparable[] array) 2 { 3 quickSort(array, 0, array.length - 1); 4 } 5 6 7 private static void quickSort(Comparable[] array, int left, int right) 8 { 9 if (left + 3 <= right) { 10 Comparable middle = just(array, left, right); 11 12 int i = left, j = right - 1; 13 14 for (;;) { 15 while (array[++i].compareTo(middle) < 0) {} 16 while (array[--j].compareTo(middle) > 0) {System.out.println(j);} 17 if (i < j) swap(array, i, j); else break; 18 } 19 20 swap(array, i, right - 1); 21 quickSort(array, left, i); 22 quickSort(array, i + 1, right); 23 } 24 else { 25 insertSort(array); 26 } 27 } 28 29 30 private static Comparable just(Comparable[] array, int left, int right) 31 { 32 int middle = (left + right) >> 1; 33 34 if (array[left].compareTo(array[middle]) > 0) swap(array, left, middle); 35 if (array[middle].compareTo(array[right]) > 0) swap(array, middle, right); 36 if (array[right].compareTo(array[left]) > 0) swap(array, left, right); 37 38 swap(array, middle, right); 39 return array[right]; 40 } 41 42 43 private static void swap(Comparable[] array, int i, int j) 44 { 45 Comparable tmp = array[i]; 46 array[i] = array[j]; 47 array[j] = tmp; 48 }
先放上代码,原理及注释随后补全
来源:https://www.cnblogs.com/rilley/archive/2012/07/02/2573310.html