希尔排序在一定程度是直接插入排序的升级,二者均需要选择一个靶向元素。直接插入比较适合一些较为有序的长度较小的序列。
直接插入排序代码实现:
void insertsort(int arr[],int len)
{
for(p = 1;p < len;p++){
temp = arr[p]
for(j = p;j > 0 && arr[j-1] > temp;){
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
希尔排序代码实现:
void shellsprt(int arr[],int len)
{
int gra;
for(gra = len/2;gra > 0;gra /=2){//用这个循环来控制步长
for(k = gra;k < len;k++){
temp = arr[j]
for(j = k;j > 0 && arr[j -1] > temp;j -= gra){//找到与其配对的元素
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
}
在一定程度上希尔排序就是在直接插入排序的基础上加上一个步长。