选择排序、插入排序、冒泡排序的时间复杂度基本为O(n^2)
一、选择排序[不稳定]
1、原理:每次从无序序列选取最小的
2、复杂度:O(n^2) - O(n^2) - O(n^2) - O(1)[平均 - 最好 - 最坏 - 空间复杂度]
public static void selectSort(int[] a) {
for (int i = 0; i < a.length; i++) {
int k = i;
for (int j = i + 1; j < a.length; j++) {
if (a[k] > a[j]) {
k = j;
}
}
if (k != i) {
int tmp = a[k];
a[k] = a[i];
a[i] = tmp;
}
}
}
二、 插入排序[稳定]
1、适用于小数组,数组已排好序或接近于排好序速度将会非常快
2、复杂度:O(n^2) - O(n) - O(n^2) - O(1)[平均 - 最好 - 最坏 - 空间复杂度]
public static void insertSort(int[] a) {
for (int i = 1; i < a.length; i++) {
int tmp = a[i];
int j = i - 1;
while(j >= 0 && tmp < a[j]) {
a[j+1] = a[j];
j--;
}
a[j+1] = tmp;
}
}
三、冒泡排序[稳定]
1、复杂度:O(n^2) - O(n) - O(n^2) - O(1)[平均 - 最好 - 最坏 - 空间复杂度]
public static void bubbleSort(int[] a) {
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length - i -1; j++) {
if (a[j] > a[j+1]) {
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}