插入排序原理:
将所有的元素分为两组,分别为已排序和未排序
将未排序组中的第一个元素插入到已排序组中
倒叙遍历已排序组中的元素,与他们依次比较并交换,直到找到一个小于等于的元素,将他插到这个位置,此时后面的其他元素向后移动一位
时间复杂度O()
代码示例:
public static void insertion(Comparable[] a){
for (int i=1;i<a.length;i++){
for (int j=i;j>0;j--){
if (a[j-1].compareTo(a[j])>0){
Comparable t=a[j-1];
a[j-1]=a[j];
a[j]=t;
}else {
break;
}
}
}
}
希尔排序原理
选定一个增长量,按增长量进行分组,增长量是一组中两个数据在原数组中的间隔
对每一组进行插入排序
减小增长量,重复插入排序,增长量最小为1
代码示例
public static void shell(Comparable[] a){
int h=1;
while (h<a.length/2){
h=2*h+1;
}
while (h>=1){
for (int i=h;i<a.length;i++){
for (int j=i;j>=h;j--){
if (a[j-h].compareTo(a[j])>0){
Comparable t=a[j-h];
a[j-h]=a[j];
a[j]=t;
}else {
break;
}
}
}
h=h/2;
}
}