c语言数组--Shell排序算法

Shell排序算法基本思想:

将n个元素的数组分成n/2个数字序列,一次循环使得每个序列排好顺序,然后再变为n/4个序列,再次排序...随着序列减少,最后变成一个,就完成了排序。(排序效率高)

#include <stdio.h>
#include <time.h>

static void ShellSort(int *shuzu,int shuzuLen);

void main()
{
	system("clear");
	int i=0;	
	int shuzu[11];
	srand((unsigned int)time(NULL));
	for(i=0;i<=10;i++)
	{
		shuzu[i]=rand()%100;
	}
	printf("Original is \n");
	for(i=0;i<=10;i++)
	{
		printf("%d  ",shuzu[i]);
	}
	printf("\n\n\n");
	ShellSort(shuzu,11);
}

static void ShellSort(int *shuzu,int shuzuLen)
{
	int i=0,j=0,r=0,temp=0,k=0;
	for(r=shuzuLen/2;r>0;r/=2)	
	{
		for(i=r;i<=10;i++)
		{
			temp=shuzu[i];
			j=i-r;
			while(j>=0 && temp<shuzu[j])
			{
				shuzu[j+r]=shuzu[j];
				j-=r;
			}
			shuzu[j+r]=temp;
			for(k=0;k<=10;k++)
			{
				printf("%d  ",*(shuzu+k));
			}
			printf("\n");
		}
		printf("the %d round  end\n",i);	
	}
	printf("\nafter ShellSort \n");
	for(i=0;i<=10;i++)
	{
		printf("%d  ",*(shuzu+i));
	}
	printf("\n");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值