标题:[求助]C的希尔排序法
只看楼主
非主流
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2005-5-29
 问题点数:0 回复次数:7 
[求助]C的希尔排序法
哪位大侠会C的希尔排序法,跟我发个例子好吗!!!
搜索更多相关主题的帖子: 希尔 例子 
2005-08-23 00:10
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
得分:0 

http://bbs.bc-cn.net/bbs/dispbbs.asp?boardID=179&ID=25812&page=1 不要一上来就发帖子。很多问题在后面都有解答。希望你去后面看看。这个我早就发过的了。而且还有抓图 #include<stdio.h> void ShellSort(int a[],int n,int d[],int numOfD) { int i,j,k,m,span,temp; for(m=0;m<=numOfD;m++) { span=d[m]; for(k=0;k<span;k++) { for(i=k;i<n-span;i=i+span) { temp=a[i+span]; j=i; while(j>-1&&temp<=a[j]) { a[j+span]=a[j]; j=j-span; } a[j+span]=temp; } } }

} main() {int a[100], b[10],n,i,k,j; printf("请问你要输入几个数字:\n"); scanf("%d",&n); printf("请输入数字:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); j=n; k=0; do{ j=j/2; b[k]=j; k++; }while(j>0); ShellSort(a,n,b,k); printf("排序后的:\n"); for(i=0;i<n;i++) printf("%d\t",a[i]); }


生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-08-23 08:29
非主流
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2005-5-29
得分:0 
我往后找了很多呢,只看到冒泡。。。

2005-08-23 15:39
牛虻
Rank: 1
等 级:新手上路
威 望:1
帖 子:472
专家分:0
注 册:2004-10-1
得分:0 
唉,激情,你这个斑竹怎么当的,那些精华的呢,怎么不置顶一下,新手最关心还是那些代码!

土冒
2005-08-23 19:22
caiyakang
Rank: 2
等 级:新手上路
威 望:5
帖 子:2111
专家分:0
注 册:2005-3-24
得分:0 
我怎么越看越觉得比较法和起泡法好像是一样的啊,

中国人的财富网:http://www..cn/
2005-08-23 19:45
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
得分:0 
   好。有时间弄个排序大全来~~~~

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-08-24 08:11
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
得分:0 
很早以 前在C论坛上发的 http://bbs.bc-cn.net/bbs/dispbbs.asp?BoardID=5&ID=15610 七种排序算法

堆排序 #include<stdio.h> void CreatHeap(int a[],int n,int h) { int i,j,flag,temp; i=h; j=2*i+1; temp=a[i]; flag=0; while(j<n && flag!=1) { if(j<n-1 && a[j]<a[j+1]) j++; if(temp>a[j]) flag=1; else { a[i]=a[j]; i=j; j=2*i+1; } } a[i]=temp; } void InitCreatHeap(int a[],int n) { int i; for(i=(n-1)/2;i>=0;i--) CreatHeap(a,n,i); } void HeapSort(int a[],int n) { int i,temp; InitCreatHeap(a,n); for(i=n-1;i>0;i--) { temp=a[0]; a[0]=a[i]; a[i]=temp; CreatHeap(a,i,0); }

} main() { int n,i,a[100]; printf("请问你要输入几个排序数:\n"); scanf("%d",&n); printf("请输入你要排序的数值:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); HeapSort(a,n); printf("排序后的:\n"); for(i=0;i<n;i++) printf("%d\t",a[i]); } ------------------------------------------------------------- 对半排序 #include<stdio.h> main() { int i,j,temp, low,high,mid,a[100],n; printf("请问你要输入几个数字:\n"); scanf("%d",&n); printf("请输入数字:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=1;i<n;i++) { temp=a[i]; low=0; high=i-1; while(high>=low) { mid=(low+high)/2; if(temp<a[mid]) high=mid-1; else low=mid+1; } for(j=i-1;j>=low;j--) a[j+1]=a[j]; a[low]=temp; } printf("排序后的:\n"); for(i=0;i<n;i++) printf("%d\t",a[i]); } --------------------------------------------- 快速排序 #include<stdio.h> void QuickSort(int a[],int low,int high){ int i=low,j=high; int temp=a[low]; while(i<j) { while(j>i&&temp<=a[j]) j--; if(j>i) { a[i]=a[j]; i++; } while(j>i&&a[i]<temp) i++; if(j>i) { a[j]=a[i]; j--; } } a[i]=temp; if(low<i) QuickSort(a,low,i-1); if(i<high)QuickSort(a,j+1,high); } main() { int a[100]; int high ,low,i,n; printf("请问你要输入几个数字:\n"); scanf("%d",&n); printf("请输入数字:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); low=0; high=n-1; QuickSort(a,low,high); printf("排序后的:\n"); for( i=0;i<n;i++) printf("%d\t",a[i]); } -------------------------------------- 冒泡 #include<stdio.h> main() {int i,j,temp,n,a[100],flag=1; printf("请问你要输入几个排序数:\n"); scanf("%d",&n); printf("请输入你要排序的数值:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n&&flag==1;i++) { flag=0; for(j=1;j<n-i;j++) if(a[j]<a[j-1]) { flag=1; temp=a[j-1]; a[j-1]=a[j]; a[j]=temp; } } printf("排序后的:\n"); for(i=0;i<n;i++) printf("%d\t",a[i]); } --------------------------------------------------------- 希尔 #include<stdio.h> void ShellSort(int a[],int n,int d[],int numOfD) { int i,j,k,m,span,temp; for(m=0;m<=numOfD;m++) { span=d[m]; for(k=0;k<span;k++) { for(i=k;i<n-span;i=i+span) { temp=a[i+span]; j=i; while(j>-1&&temp<=a[j]) { a[j+span]=a[j]; j=j-span; } a[j+span]=temp; } } }

} main() {int a[100], b[10],n,i,k,j; printf("请问你要输入几个数字:\n"); scanf("%d",&n); printf("请输入数字:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); j=n; k=0; do{ j=j/2; b[k]=j; k++; }while(j>0); ShellSort(a,n,b,k); printf("排序后的:\n"); for(i=0;i<n;i++) printf("%d\t",a[i]); } --------------------------------------------- 选择排序 #include<stdio.h> main() {int a[100], min,i,k,temp,j,cout; printf("请问你要输入几个数字(不要超过100个!!):\n"); scanf("%d",&cout); printf("请输入数字:\n"); for(i=0;i<cout;i++) scanf("%d",&a[i]); for(i=0;i<cout;i++) { min=i; for(k=i+1;k<cout;k++) { if(a[min]>a[k]) { min=k; } }if(i!=min) { temp=a[i]; a[i]=a[min]; a[min]=temp; } } for(j=0;j<cout;j++) printf("%d\t",a[j]); } ------------------------------------------ 直接插入 #include<stdio.h> main() { int i,j,n,temp,a[100]; printf("请问你要输入几个数字:\n"); scanf("%d",&n); printf("请输入数字:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n-1;i++) { j=i; temp=a[i+1]; while(temp<a[j]&&j>-1) { a[j+1]=a[j]; j--; } a[j+1]=temp; } printf("排序后的:\n"); for(i=0;i<n;i++) printf("%d\t",a[i]); } 还有个二路归并排序我不会.我过下就热情发上来给大家 我在数据结构论坛发了这7种排序。但是那边我全部附有抓图的.如果想去看看结果的.就去那边看看好了。 坚强依然!永不言苦!永不言败!睇透数据结构!编程编程再编程!-----------激情依旧


生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-08-25 07:36
wulidress
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2005-8-9
得分:0 
这样应该够用的了吧   
2005-09-12 18:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-25812-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.678709 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved