封装成函数:

//交换数组元素

void swap(int *a,int i,int j)

{

int t = a[i];

a[i] = a[j];

a[j] = t;

}

//希尔排序

void shell_sort(int *a,int len)

{

int h=1,i,j;

while(h

{

h = 3*h+1;

}

while(h>=1)

{

//将数组变为间隔h个元素有序

for (i = h; i < len; i++)

{

//间隔h插入排序

for (j = i; j >= h && a[j] < a[j-h]; j -= h)

{

swap(a, j, j-h);

}

}

h /= 3;

}

}

测试:

//打印输出数组

void print_arr(int *a,int len)

{

int i;

if(len<1) //数组长度必须大于0

{

printf("length greater than 0");

return;

}

//打印整个数组

printf("[");

for(i=0; i

{

printf("%d ",a[i]);

}

printf("%d]\n",a[len-1]);

}

int main()

{

int a[] = {9,0,6,5,8,2,1,7,4,3};

int len = sizeof(a)/sizeof(int);

print_arr(a,len);

shell_sort(a,len);

print_arr(a,len);

return 0;

}

输出:

[9 0 6 5 8 2 1 7 4 3]

[0 1 2 3 4 5 6 7 8 9]

希尔排序c语言,希尔排序(C/C++实现)相关推荐

  1. python如何给字符串排序_Python语言字符串排序方法

    本文主要向大家介绍Python语言字符串排序方法了,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 一般情况下,python中对一个字符串排序相当麻烦:一.python中的字符串类 ...

  2. matlab实现希尔排序,C语言希尔排序算法

    用希尔排序法对一组数据由小到大进行排序,数据分别为 69.56.12.136.3.55.46. 99.88.25. 实现过程: (1)自定义函数 shsort(),实现希尔排序. (2) main() ...

  3. 桶排序c语言,桶排序(Bucket Sort)的数组实现

    桶排序的数组实现 桶排序Bucket Sort从1956年就开始被使用,该算法的基本思想是由E. J. Issac R. C. Singleton提出来. 桶排序(Bucket Sort)是迄今为止最 ...

  4. c语言选择排序_C语言——选择排序

    1 选择排序(5分) 题目内容:编写选择排序,要求排序过程调用函数实现,在主函数输入n个数据,调用函数后,输出排好序的元素输入格式:输入整型数n,并输入n个整数,输入数据用空格隔开输出格式:输出排好序 ...

  5. 用C语言对单词首字母进行排序,c语言单词排序

    满意答案 ajuum2d8l 推荐于 2017.09.12 采纳率:59%    等级:10 已帮助:674人 程序第一次运行时,会创建一个"word.txt"(不包括引号)的文本 ...

  6. C语言希尔排序(解析)

    C语言希尔排序(解析) 网上找的移动图:

  7. 图解,C语言希尔排序

    希尔排序和插入排序很相似,有点像插入排序的升级版本. 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本 ...

  8. C语言希尔排序及其增量序列

    希尔排序 前情提要:C语言排序算法 插入排序的神奇之处在于,只要运气够好,甚至可以达到O(n)O(n)O(n)的时间复杂度,希尔排序的思想就是想办法放大这种运气. 希尔排序又称缩小增量排序,据说是第一 ...

  9. 希尔排序(C语言简单实现)

    希尔排序(C语言简单实现) 希尔排序是直接插入排序的升级版,直接插入排序每次增量是1,但希尔排序的增量increment比1大,也就是说直接插入排序是一个一个比较的,但是希尔排序是跳着来的,从而实现顺 ...

最新文章

  1. Codeforces Round #699 (Div. 2) E.Sorting Books(贪心+DP / 线段树)超高质量题解,看不懂来打我 ~
  2. Linux从入门到精通系列之SHELL编程循环语句语法及实例详解(forwhileuntil)
  3. 理解和使用systrace
  4. C语言跟随鼠标画方框,JS拖动鼠标画出方框实现鼠标选区的方法
  5. windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群
  6. ECS vs K8S
  7. mybatis一对一联表查询的两种常见方式
  8. QLabel 图片大小设定
  9. 攻击者“完全自动化”发动NPM供应链攻击
  10. Android系统架构
  11. 华盛顿道格拉斯县计划建立区块链创新园区
  12. 洪水攻击程序c语言,洪水攻击原理及代码实现全攻略(附源代码)病毒防范 -电脑资料...
  13. 图像处理领域术语英文对应
  14. 如何通过软文营销提高用户黏性 做好品牌推广和营销宣传
  15. 2017年总结—颓废的一年
  16. Netty框架之Selector轮询器
  17. make_unique的使用
  18. 【联机对战】微信小程序联机游戏开发流程详解
  19. 【转】git中如何忽略xcuserstate
  20. 为什么停用CentOS?

热门文章

  1. pytorch 指定卡1_[原创][深度][PyTorch] DDP系列第一篇:入门教程
  2. linux joe复制一行,Linux joe命令
  3. if not exist Oracle,oracle 兑现 if not exist 方法
  4. mockito_Mockito:无法实例化@InjectMocks字段:类型是接口
  5. junit5_使用JUnit对ADF应用程序进行单元测试
  6. 最长公共子序列_Java恶意序列化背后的历史和动机
  7. 这些 IDEA 的优化设置赶紧安排起来,效率提升不是一点点!
  8. 耗时6个月整理的最全Java资源,限时删
  9. Spring Cloud Alibaba基础教程:使用Sentinel实现接口限流
  10. 使用Swagger2Markup实现API文档的静态部署(一):AsciiDoc