本文目录
1 冒泡排序
平均时间复杂度:O(n^2)
稳定性:稳定(排序前后,相同元素的相对位置保持不变)
private static void sort(int[] data) {
for (int i = 0; i < data.length - 1; i++) {
boolean complete = true;
for (int j = 0; j < data.length - 1 - i; j++) {
if (data[j] > data[j + 1]) {
int temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
complete = false;
}
}
if (complete) {
break;
}
}
}

2 选择排序
平均时间复杂度:O(n^2)
稳定性:不稳定(排序后,相同元素的相对位置可能发生变化)
private static void sort(int[] data) {
for (int i = data.length - 1; i > 0; i--) {
int maxIndex = i;
for (int j = 0; j < i; j++) {
if (data[j] > data[maxIndex]) {
maxIndex = j;
}
}
int temp = data[i];
data[i] = data[maxIndex];
data[maxIndex] = temp;
}
}

3 插入排序
平均时间复杂度:O(n^2)
稳定性:稳定(排序前后,相同元素的相对位置保持不变)
适用场景:部分元素已有序
private static void sort(int[] data) {
for (int i = 1; i < data.length; i++) {
for (int j = i; j > 0; j--) {
if (data[j] < data[j - 1]) {
int temp = data[j];
data[j] = data[j - 1];
data[j - 1] = temp;
} else {
break;
}
}
}
}

4 希尔排序
平均时间复杂度:O(n^1.25)
稳定性:不稳定(排序后,相同元素的相对位置可能发生变化)
适用场景:大规模乱序
相关说明:希尔排序是基于插入排序进行改进而来的算法。插入排序只交换相邻的元素,在大规模乱序情况下,极有可能发生某个元素从某一端逐位交换至另一端,严重影响效

最低0.47元/天 解锁文章
635





