基于visual Studio2013解决C语言竞赛题之1081shell排序







题目


解决代码及点评

/************************************************************************/
/* 
81.	SHELL排序程序。
该方法的特征是:一个元素与它间隔为J 的元素进行比较或交换,然后逐步缩小这个间隔到1为止。
J缩小的规律可以是 J<=J/2或J<=(J+1)/2,我们取 J<=J/2(取整)编程。具体地说方法如下:
对于N个数据,首先让J<=INT(N/2),让X[1]与X[J+1]比较(假设数组名X),
X[2]与X(J+2)比较,...,X[N-J]与X[N]比较,若次序颠倒,则互相交换。然后再重新比较一轮,
直到没有交换为止。于是令J<=INT(J/2),再重复以上操作,直到J=1,而且在这一轮比较中没有交换,才排序完成。
例如 N=9
数据为:              5  7  6  4  9  1  3  2  8  交换次数
J取4(INT(9/2))      5  1  3  2  8  7  6  4  9    4
再比较一轮                        不变             0
J取2(INT(4/2))      3  1  5  2  6  4  8  7  9    3
再比较一轮                        不变             0
J取1(INT(2/2))      1  3  2  5  4  6  7  8  9    4
再比较一轮            1  2  3  4  5  6  7  8  9    2
再比较一轮                        不变
停止


*/
/************************************************************************/
#include <stdio.h>
#include <stdlib.h>
void	Shellsort(int * arr,int n)
{
	int i,j,increment;
	int temp;
	for (increment=n/2;increment>0;increment/=2)
	{
		for (i=increment;i<n;i++)
		{
			temp=arr[i];
			for (j=i;j>=increment;j-=increment)
			{
				if (temp<arr[j-increment])
				{
					arr[j]=arr[j-increment];
				}
				else
				{
					break;
				}
			}
			arr[j]=temp;
		}
	}
}
void main()
{	
	int arr[10]={1,4,2,6,3,8,9,6,3,12};
	for (int i=0;i<10;i++)
	{
		printf("%5d",arr[i]);
	}
	printf("\n");
	Shellsort(arr,10);
	for (int i=0;i<10;i++)
	{
		printf("%5d",arr[i]);
	}
	printf("\n");
	system("pause");
}



代码编译以及运行

由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:

1)新建工程

2)选择工程

3)创建完工程如下图:

4)增加文件,右键点击项目

5)在弹出菜单里做以下选择

6)添加文件

7)拷贝代码与运行


程序运行结果


代码下载

http://download.csdn.net/detail/yincheng01/6681845

解压密码:c.itcast.cn





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值