希尔排序--C语言

希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。
基本思路是先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2,直至增量为1;
利用C语言写的希尔排序的算法如下:
平均时间复杂度为O(N**d),最坏时间复杂度为O(NN),稳定性为不稳定;

#include <stdio.h>

void shell_Sort(int A[],int N); 

int main (void)
{
	int i;
	int arr[21] = {2,6,9,11,3,1,7,4,17,26,14,56,90,67,43,32,12,19,100,23,0}; 
	shell_Sort(arr,21);
	for (i = 0; i< 21; i++)
	{
		printf("%d ",arr[i]);
	}
	
	return 0;
} 

void shell_Sort(int A[],int N)
{
	int i,j;
	int D;//存储希尔增量的值
	int Tmp;//储存临时的值
	for(D = N/2; D > 0;D /= 2)
	{
		for(i = D; i < N; i++)
		{
			Tmp = A[i];//相当于第二张摸的牌 
			for( j = i; j >= D && A[j - D] > Tmp; j -= D)//用Tmp去跟前面D间隔的元素进行排序 
			{
				A[j] = A[j - D];//空出个位置给Tmp 
			}
			A[j] = Tmp;//此时j就是Tmp位置 
		}
	} 
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值