1、冒泡排序
两两比较,每次循环都会找到最大的放到最后,直接循环结束,时间复杂度是O(n^2)
public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int a = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = a;
}
}
}
}
2、快速排序
首先选定一个基准,然后让基准左边的元素都小于它,右边的元素都大于它,然后递归基准左边的元素和右边的元素!时间复杂度是O(logn),但是不稳定
public static void quickSort(int[] arr, int l, int r) {
if (l >= r) return;
int i = l - 1, j = r + 1, x = arr[(l + r) >> 1];
while (i < j) {
do i++; while (arr[i] < x);
do j--; while (arr[j] > x);
if (i < j) {
int a = arr[j];
arr[j] = arr[i];
arr[i] = a;
}
}
quickSort(arr, l, j);
quickSort(arr, j + 1, r);
}
3、插入排序
插入排序,将每个元素和前面的元素依次比较,知道找到自己的位置放进入即可,时间复杂度是O(n^2)
public static void insertSort(int[] arr) {
int current;
for (int i = 1; i < arr.length; i++) {
current = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > current) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = current;
}
}