1. 低级排序
(1)冒泡排序(Bubble Sort)
思路: 每次从左到右冒泡,把最大的数推到最后。
public class BubbleSort {public static void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {boolean swapped = false;for (int j = 0; j < n - 1 - i; j++) {if (arr[j] > arr[j + 1]) {swap(arr, j, j + 1);swapped = true;}}if (!swapped) break; // 如果本轮未交换,说明已排序}}private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}
📌 时间复杂度:O(n²)(最坏情况)
(2)选择排序(Selection Sort)
思路: 每次找到最小的数,放到前面。
public class SelectionSort {public static void selectionSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {int minIdx = i;for (int j = i + 1; j < n; j++) {if (arr[j] < arr[minIdx]) {minIdx = j;}}swap(arr, i, minIdx);}}private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}
📌 时间复杂度:O(n²)
(3)插入排序(Insertion Sort)
思路: 逐步将无序元素插入到有序部分中。
public class InsertionSort {public static void insertionSort(int[] arr) {int n = arr.length;for (int i = 1; i < n; i++) {int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}}
}
📌 时间复杂度:O(n²)(最坏情况)
(4)希尔排序(Shell Sort)
思路: 基于插入排序,但按一定间隔分组,逐步缩小间隔。
public class ShellSort {public static void shellSort(int[] arr) {int n = arr.length;for (int gap = n / 2; gap > 0; gap /= 2) {for (int i = gap; i < n; i++) {int key = arr[i];int j = i;while (j >= gap && arr[j - gap] > key) {arr[j] = arr[j - gap];j -= gap;}arr[j] = key;}}}
}
2. 高级排序
(1)快速排序(Quick Sort)
思路: 选取基准数,划分左右子数组,递归排序。
public class QuickSort {public static void quickSort(int[] arr, int left, int right) {if (left >= right) return;int pivot = partition(arr, left, right);quickSort(arr, left, pivot - 1);quickSort(arr, pivot + 1, right);}private static int partition(int[] arr, int left, int right) {int pivot = arr[right];int i = left;for (int j = left; j < right; j++) {if (arr[j] < pivot) {swap(arr, i, j);i++;}}swap(arr, i, right);return i;}private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}
📌 时间复杂度:O(n log n)