希尔排序(C语言)

希尔排序

希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。

1.排序原理

主要是通过增量的步长来进行分组,然后对每一组进行直接插入排序

<mark>排序过程</mark>

简单示例,例如:
[4 7 3 8 2 6 5 1]
第一趟排序:
	步长:step=4 分组:[4 2][7,6][3 5][8 1]
	对每一组进行直接插入排序得:[2 4][6,7][3 5][1 8]
	整体排序后:[2 6 3 1 4 7 5 8]
第二趟排序:
	步长:step=2 分组:[2 3 4 5][6 1 7 8]
	对每一组进行直接插入排序得:[2 3 4 5][1 6 7 8]
	整体排序后:[2 1 3 6 4 7 5 8]
第三趟排序:
	步长:step=1 分组:[2 1 3 6 4 7 5 8]
	对每一组进行直接插入排序得:[1 2 3 4 5 6 7 8]
	整体排序后:[1 2 3 4 5 6 7 8]
排序结束

<mark>图示</mark>

2.源代码:

#include<stdio.h>
#define N 10
void ShellSort(int num[],int len)
{
	int i,j,temp,step;
	for(step=len/2;step>=1;step/=2)//步长间隔每次减半
		for(i=step;i<len;i+=step)//按步长遍历数组
		{
			//插入排序过程
			if(num[i]<num[i-step])
			{
				temp=num[i];
				for(j=i-step;num[j]>temp;j-=step)
					num[j+step]=num[j];
				num[j+step]=temp;
			}
		}
}
int main()
{
	int num[N]={9,8,7,6,5,4,3,2,1,0};
	ShellSort(num,N);
	for(int i=0;i<N;i++)
		printf("%d ",num[i]);
	printf("\n");
	return 0;
}
全部评论

相关推荐

03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务