//插入排序 public static void insertionSort(int[] arr) { for (int j = 1; j < arr.length; j++) { int key = arr[j]; int i = j - 1; while (i >= 0 && arr[i] > key) { arr[i + 1] = arr[i]; i = i - 1; } arr[i + 1] = key; } } //选择排序 public static void selectionSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int minIdx = i; for (int j = i + 1; j < arr.length; j++) { if (arr[minIdx] > arr[j]) { minIdx = j; } } int temp = arr[i]; arr[i] = arr[minIdx]; arr[minIdx] = temp; } } //归并排序 public static void mergeSort(int[] arr, int low, int high) { if ((low + 1) > high) { return; } int mid = (low + high) >> 1; mergeSort(arr, low, mid); mergeSort(arr, mid + 1, high); merge(arr, low, mid, high); } private static void merge(int[] arr, int low, int mid, int high) { int n1 = mid - low + 1; int n2 = high - mid; int[] left = new int[n1 + 1]; int[] right = new int[n2 + 1]; for(int i = 0; i < n1; i++) { left[i] = arr[low + i]; } for (int i = 0; i < n2; i++) { right[i] = arr[mid + 1 + i]; } left[n1] = Integer.MAX_VALUE; right[n2] = Integer.MAX_VALUE; int i = 0; int j = 0; int k = low; while (k <= high) { if (left[i] <= right[j]) { arr[k++] = left[i++]; } else { arr[k++] = right[j++]; } } } //快速排序 public static void quickSort(int arr[], int low, int high) { if (low >= high) { return; } int temp = arr[low]; int i = low; int j = high; while (i < j) { while (j > i && arr[j] >= temp) { j--; } arr[i] = arr[j]; while (i < j && arr[i] <= temp) { i++; } arr[j] = arr[i]; } arr[i] = temp; quickSort(arr, low, i - 1); quickSort(arr, i + 1, high); }
//堆排序
public static void heapSort(int[] arr) {
buildMaxHeap(arr);
for (int i = arr.length - 1; i > 0; i--) {
swap(arr, i, 0);
maxHeapify(arr, i, 0);
}
}
//建堆
public static void buildMaxHeap(int[] arr) {
for (int i = arr.length - 1; i > 0; i--) {
maxHeapify(arr, arr.length, i);
}
}
//维护堆的性质
public static void maxHeapify(int[] arr, int len, int i) {
int l = 2 * i + 1;
int r = 2 * i + 2;
int largest = i;
if (l < len && arr[l] > arr[largest]) {
largest = l;
}
if (r < len && arr[r] > arr[largest]) {
largest = r;
}
if (largest != i) {
swap(arr, i, largest);
maxHeapify(arr, len, largest);
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}