五种排序的算法(包括主函数调用)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#define MAX 100
void Quicksort(int d[],int min,int max);
void Shellsort(int r[],int n);
void Bubblesort(int r[],int n);
void StraInsSort(int R[],int n);
void Selectsort(int r[],int n);
//*************************主函数**********************
void main()
{
int s,ch,n,x,i;
int a[MAX];
int p;
printf("请输入待排序列中数据的个数:");
scanf("%d",&n);
printf("请输入排序前序列:");
for(s=1;s<=n;s++)
scanf("%d",&a[s]);
{
printf("0 is exit,other is continue:");
scanf("%d",&x);
while(x)
{
for(p=1;p<=5;p++)
{
for(i=1;i<20;i++) printf("%c ",p);printf("\n");
printf("please input your choice(1-5):");
printf("\n1.直接插入排序\t2.希尔排序\t3.冒泡排序\n4.快速排序\t5.直接选择排序\t6.堆排序\n");
for(i=1;i<20;i++) printf("%c ",p); printf("\n");
printf("请选择:");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("\n直接插入排序\n");
StraInsSort(a,n);
break;
case 2:
printf("\t\t希尔排序\t");
Shellsort(a,n);
break;
case 3:
printf("\t\t冒泡排序\t");
Bubblesort(a,n);
break;
case 4:
printf("\t\t快速排序\t");
Quicksort(a,1,n);
break;
case 5:
printf("\t直接选择排序\t");
Selectsort(a,n);
break;
default:printf("\n");
}
printf("排序后:");
for(s=1;s<=n;s++)
printf("%4d",a[s]);
printf("\n");
printf("0 is exit!other is continue:");
scanf("%d",&x);
}
}
}
printf("感谢使用!");
}
//****************************直接插入排序******************** void StraInsSort(int R[],int n)
{
int i,j,k;
for(i=2;i<=n;i++)
{
R[0]=R[i];
j=i-1;
while(R[0] { R[j+1]=R[j]; j--; } R[j+1]=R[0]; printf("第%d 趟排序结果:",i-1); for(k=1;k<=n;k++) printf("%6d",R[k]); printf("\n"); } } //***************************希尔排序*************************** void Shellsort(int r[],int n) { /*对数组r进行希尔排序*/ int i,j,d; d=n/2; /*去初始增量*/ while(d>=1) { for(i=d+1;i<=n;i++) { r[0]=r[i];j=i-d; while(j>0&&r[0] { r[j+d]=r[j]; /*记录后移,查找插入位置*/ j=j-d; } r[j+d]=r[0]; /*插入*/ } d=d/2; /*缩小增量值*/ } } //***********************冒泡排序********************************** void Bubblesort(int s[],int n) /*对数组S中的n个记录进行冒泡排序*/ { int a,i,j,exchange; for(i=n;i>1;i--) { exchange=0; /*设交换标志位,exchange=0表示未交换*/ for(j=1;j<=i-1;j++) if(s[j]>s[j+1]) { a=s[j];s[j]=s[j+1];s[j+1]=a; exchange=1; /*已交换,设exchange=18/ } /* exchange=0表示未进行交换,此时即可退出循环*/ if(!exchange) break; } } } //******************************快速排序************************** void Quicksort(int d[],int min,int max) { int head,tail; int t; if(min { head=min; tail=max; t=d[head]; while(head!=tail) /*从表的两端交替地向中间扫描*/ { while(head tail--; /*将比支点记录小的记录移到前端*/ if(head d[head++]=d[tail]; while(head