博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
希尔排序法(缩小增量法)
阅读量:5255 次
发布时间:2019-06-14

本文共 1783 字,大约阅读时间需要 5 分钟。

2016-10-25 16:51:49

      首先,要明白希尔排序法是什么。它是一种改进版的直接插入法,它是将整个无序列分割成若干小的子序列分别进行插入排序的方法。

1 #include
2 3 //希尔排序法 4 void shell_sort(int a[],int n); 5 int main() 6 { 7 int i; 8 int a[6]; 9 printf("please enter five numbers:\n");10 for(i=1;i<6;i++)11 {12 scanf("%d",&a[i]);13 }14 shell_sort(a,5);15 printf("after number:\n");16 for(i=1;i<6;i++)17 {18 printf("%4d",a[i]);19 }20 printf("\n");21 }22 23 void shell_sort(int a[],int n)24 {25 int i,j;26 int d;27 d=n/2;28 while(d)29 {30 for(i=d+1;i<=n;i++)31 {32 a[0]=a[i];33 j=i-d;34 while(a[0]>=a[j] && j>0)35 {36 a[j+d]=a[j];37 j=j-d;38 }39 a[j+d]=a[0];40 }41 d=d/2;42 }43 }

 

这就和直接插入法非常类似了。因此其也有另一种形式。

1 #include
2 3 //希尔排序法 4 void shell_sort(int a[],int n); 5 int main() 6 { 7 int i; 8 int a[6]; 9 printf("please enter five numbers:\n");10 for(i=1;i<6;i++)11 {12 scanf("%d",&a[i]);13 }14 shell_sort(a,5);15 printf("after number:\n");16 for(i=1;i<6;i++)17 {18 printf("%4d",a[i]);19 }20 printf("\n");21 }22 23 void shell_sort(int a[],int n)24 {25 int i;26 int d;27 d=n/2;28 while(d)29 {30 for(i=d+1;i<=n;i++)31 {32 a[0]=a[i];33 34 while(a[0]>=a[i-d] && i>d)35 {36 a[i]=a[i-d];37 i=i-d;38 }39 a[i]=a[0];40 }41 d=d/2;42 }43 }

发现两次while循环后,a[0]复制给谁的异同了吗?

两个不一样,但是是为什么呢?

其实,最后a[0]赋予的值和最后一个相同,即与a[i]=a[i-d]中的a[i-d]相同。

 

转载于:https://www.cnblogs.com/xiaochige/p/5998569.html

你可能感兴趣的文章
Apache Jackrabbit 2.6.0 发布
查看>>
Reporting Service 2000的一些技巧总结
查看>>
echarts饼图显示百分比
查看>>
C#中的out string temp是什么意思?【转】
查看>>
第十二次作业
查看>>
喜欢的话
查看>>
[jQuery]在WCF 4中如何用JSONP轻松实现跨域Ajax请求
查看>>
JMS消息
查看>>
16位整数,32位整数,64位整数
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
Jenkins里邮件插件触发器配置和Send to Developers到底是什么意思(转)
查看>>
angular/cli安装
查看>>
网页记账本开发三
查看>>
11gR1 Patchset 2 ~ 11.1.1.3.0 (SOA) features ..
查看>>
Hdu 1708 Fibonacci String
查看>>
java lock锁住特定对象
查看>>
JAX-WS 访问SSL 的WebService 老是HTTP transport error: Connection refused错误的解决办法。...
查看>>
面向对象与函数式的对比
查看>>
yii2实战教程之第一个Yii程序
查看>>
php上传文件及头像预览
查看>>