五种排序的算法(包括主函数调用)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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=t)

tail--; /*将比支点记录小的记录移到前端*/ if(head

d[head++]=d[tail];

while(head

相关文档
最新文档