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

来源:互联网 发布:windows开启多线程 编辑:程序博客网 时间:2024/05/19 09:01






题目


解决代码及点评

/************************************************************************//* 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再比较一轮                        不变             0J取2(INT(4/2))      3  1  5  2  6  4  8  7  9    3再比较一轮                        不变             0J取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>voidShellsort(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





0 0
原创粉丝点击