希尔排序shell sort

希尔排序(Shell Sort)是 插入排序 的一种。是针对 直接插入排序 算法的改进。该方法又称缩小 增量 排序,因DL.Shell于1959年提出而得名。//以上来自百度百科。
         Shell基本思想:

   将整个序列分成m个子序列,对每个子序列分别排序。逐步减少子序列列数m,直至m=1为止。

n=10;

通常我们第一次取的增量 d=n/2,对比之后将小的数放到前面,当然你可以将大的放到前面

9   2   8    4    6    1    -1    0    93    24 

第一趟:9-->1 , 2-->-1, 8-->0 , 4-->93 , 6-->24,

结果:1 -1  0  4  6  9  2  8  93  24

第二趟:d=d/2=2;

1-->0 , 0-->6, 6-->2, 2-->93

-1-->4, 4-->9, 9-->8, 8-->24

结果:自己想

第三趟:自己动动手呗。

环境:winxp,vc++6.0
//最好自己写一遍吧,能不看就不看
//还有,这边说这个shell排序是插入排序的改进版,但是我在这个实现中,似乎没有很好的体现插入排序
#include<stdio.h>

void shellinsert( int *p, int n, int d)
{
	int i;
	int j;
	int k;
	int temp;

	for(i=0;i<d;i++)
	{
		k=i;
		for(j=i+d;j<n;j=j+d)
		{
			if(p[k]>p[j])
			{
				temp=p[k];
				p[k]=p[j];
				p[j]=temp;
			}
			k=j;//这个别写错位置了,我就是写错位置,搞了一个多小时
		}
	}
}

void shellsort(int *p, int n )
{
   int d=n/2;
   while(d>0)
   {
	   shellinsert(p, n, d);
	   d=d/2;
   }
}

int main()
{
	int n=10;
	int i=0;
    int p[10]={9,2,8,4,6,1,-1,0,93,24};

	for( i=0;i<n;i++)
		printf("%d ",p[i]);
    printf("\n");

	shellsort(p,n);

	for( i=0;i<n;i++)
		printf("%d ",p[i]);
     printf("\n");

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值