vlambda博客
学习文章列表

直接插入排序的另一进阶功法


俗话说的好:“条条大路通罗马”,终点虽有一个,但通往成功的道路却有多条。


昨天,小编已经向各位小伙伴传授了一套关于,今天再向各位小伙伴传授它的另一进阶功法。


01.测试对象


    


02.规则讲解


希尔排序的基本思想:先将待排序列按照某种增量分为若干个子序列,分别为这几个子序列进行直接插入排序,当待排序列基本有序之后,最后在进行一次直接插入排序。有图来讲解一下算法。



继续分组,直到增量为1 排序完成



03.程序代码


# include <stdio.h>//希尔排序
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.小编自语


“叮叮叮,叮叮叮”,小伙伴们,咱们每日一句又开始了:你既然期望辉煌伟大的一生,那么就应该从今天起,以毫不动摇的决心和坚定不移的信念,凭自己的智慧和毅力,去创造属于你自己的快乐