参考链接:
github 有个项目,利用 java 实现了各种算法,下面是几种排序写法
/** * 冒泡排序,排序后为升序 */ public static> void bubbleSort(T[] array) { int lastIndex = array.length - 1; boolean swap; do { swap = false; for(int i=0; i 0) { T temp = array[i]; array[i] = array[i+1]; array[i+1] = temp; swap = true; } } lastIndex--; }while(swap); } /* * 插入排序,排序后为升序 */ public static > void insertSort(T[] arr) { T key; int last = arr.length; for (int i = 1; i < last; i++) { key = arr[i]; int j = i - 1; while (j >= 0 && key.compareTo(arr[j]) < 0) { arr[j + 1] = arr[j]; j--; } arr[j+1] = key; } } /* * 合并排序, 升序 */ public static > void mergeSort(T[] arr, T[] temp, int left, int right) { if (left < right) { int mid = left + (right - left) / 2; mergeSort(arr, temp, left, mid); mergeSort(arr, temp, mid + 1, right); merge(arr, temp, left, mid, right); } } public static > void merge(T[] arr, T[] temp, int left, int mid, int right) { for (int i = left; i <= right; i++) { temp[i] = arr[i]; } int i = left; int j = mid + 1; int k = left; while (i <= mid && j <= right) { if (temp[i].compareTo(temp[j]) <= 0) { arr[k] = temp[i]; i++; } else { arr[k] = temp[j]; j++; } k++; } while (i <= mid) { arr[k] = temp[i]; i++; k++; } } /* * 快速排序 */ public static > void quickSort(T[] arr, int start, int end) { if (start < end) { int pIndex = partition(arr, start, end); quickSort(arr, start, pIndex - 1); quickSort(arr, pIndex + 1, end); } } /* * 分割 */ public static > int partition(T[] arr, int start, int end) { T pivot = arr[end]; int PIndex = start; for (int i = start; i < end; i++) { if (arr[i].compareTo(pivot) <= 0) { swap(arr, i, PIndex); PIndex++; } } swap(arr, PIndex, end); return PIndex; } /* * 交换数组中的两个元素 */ public static > void swap(T[] arr, int initial, int fin) { T temp = arr[initial]; arr[initial] = arr[fin]; arr[fin] = temp; }