前言
插入排序分为直接插入排序和希尔排序。
直接插入排序
将新的数插入到已经排序好的一个队列中,直接插入排序时间复杂度:
O(n^2)
public void insertSort(int k[]) {
int temp;
int j;
int i;
for (i = 1; i < k.length; i++) {
if (k[i] < k[i - 1]) {
temp = k[i];
j = i - 1;
while (j >= 0 && k[j] > temp) {
k[j + 1] = k[j];
j--;
}
k[j + 1] = temp;
}
}
}
希尔排序
希尔排序是1959 年由D.L.Shell 提出来的,相对直接插入排序有较大的改进。希尔排序的实质就是分组插入排序,该方法又称缩小增量排序。
取一个增量 step (step
public void shellSort(int k[]) {
int temp;
int gap;
// 分组
for (gap = k.length / 2; gap > 0; gap = gap / 2) {
//数组第step个元素开始,然后将每个元素与自己组内的数据进行直接插入排序
for (int i = gap; i < k.length; i++) {
if (k[i] < k[i - gap]) {
temp = k[i];
int j = i - gap;
while (j >= 0 && temp < k[j]) {
k[j + gap] = k[j];
j -= gap;
}
k[j + gap] = temp;
}
}
}
}