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

Posted 小弟笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了直接插入排序的另一进阶功法相关的知识,希望对你有一定的参考价值。


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


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


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.小编自语


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

以上是关于直接插入排序的另一进阶功法的主要内容,如果未能解决你的问题,请参考以下文章

排序02-直接插入排序法

排序相关代码(数据结构笔试复测Leecode牛客)

react项目中对dom元素样式修改的另一种方法以及将组件插入到node节点中

排序算法 #4 再讲插入排序

insert into 的另一种添加插入新行方式

Druid -> 按本机查询的时间戳以外的另一列对数据进行排序