希尔排序
前言
学生党,手写一下希尔排序
一、普通插入排序
先写一个插入排序作为模板:
void insert_sort(int a[],int len){
for(int i=0;i<len-1;i++){
int last = i,tmp = a[last+1];
while(last>=0){
if(tmp<a[last]){
a[last+1] = a[last];
last--;
}else{
break;
}
}
a[last+1] = tmp;
}
return;
}
二、希尔排序
有了插入排序的模板,希尔排序就很容易写了:
void shell_sort(int a[],int len){
int gap = len;
while(gap>1){
gap /= 2;
for(int i=0;i<len-gap;i++){
int last = i, tmp = a[last+gap];
while(last>=0){
if(tmp<a[last]){
a[last+gap] = a[last];
last -= gap;
}else{
break;
}
}
a[last+gap] = tmp;
}
}
return;
}
欢迎交友、交流