直接插入排序的另一进阶功法
俗话说的好:“条条大路通罗马”,终点虽有一个,但通往成功的道路却有多条。
昨天,小编已经向各位小伙伴传授了一套关于,今天再向各位小伙伴传授它的另一进阶功法。
01.测试对象
02.规则讲解
希尔排序的基本思想:先将待排序列按照某种增量分为若干个子序列,分别为这几个子序列进行直接插入排序,当待排序列基本有序之后,最后在进行一次直接插入排序。有图来讲解一下算法。
继续分组,直到增量为1 排序完成
03.程序代码
//希尔排序
void sort(int * a,int length); //得到不同的增量,将值赋给shellsort函数
void shellsort(int * a,int length,int h);
/*
函数的目的 实现一次增量的排序
a 指针变量 接受数组的首地址
length 数组的长度
h 增量
*/
void traversal(int * a,int length); //遍历
int main(void){
int a[10] = {1,3,-4,7,9,23,7,-3,5,10};
sort(a,10);
traversal(a,10);
return 0;
}
void shellsort(int * a,int length,int h){
int i,j;
int x ;
for(i=h;i<length;++i){
x = a[i] ;
for(j=i-h;j>=0 && a[j]>x;j=j-h){
a[j+h] = a[j];
}
a[j+h] = x;
}
}
void sort(int * a,int length){
int i ;
for(i=length/2;i>=1;i=i/2){
shellsort(a,length,i);
}
return;
}
void traversal(int * a,int length){
int i;
for(i=0;i<length;++i){
printf("%d ",a[i]);
}
printf("\n");
return;
}
04.小编自语
“叮叮叮,叮叮叮”,小伙伴们,咱们每日一句又开始了:你既然期望辉煌伟大的一生,那么就应该从今天起,以毫不动摇的决心和坚定不移的信念,凭自己的智慧和毅力,去创造属于你自己的快乐。