c语言排序问题 求求求求求求求

【问题描述】实现各种常用排序(直接插入排序、二分法排序、直接选择排序、冒泡排序、希尔排序、快速排序)算法。
【要 求】编写菜单程序,按照升序排序。输入数据元素的个数任意,输入数据元素的值任意(正整数),输出排序前、排序后的数据元素。

#include<stdio.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 1000
double maopao(int B[],int M)//冒泡排序
{
clock_t start, finish;
double time; // 测量一个事件持续的时间
start = clock();
int i,j,t;
for(i=0;i<M-1;i++)
for(j=0;j<M-i-1;j++)
if(B[j]>B[j+1])
{
t=B[j];B[j]=B[j+1];B[j+1]=t;
}
printf("经排序后序列为:\n");
for(i=0;i<M;i++)
{
if(i%10==0)printf("\n");
printf("%d ",B[i]);
}
printf("\n");
finish = clock();
time = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "冒泡排序法运行时间:" );
printf( "%f seconds\n", time );
return time;
}
double charru(int A[], int len)//插入排序
{
clock_t start, finish;
double time; // 测量一个事件持续的时间
start = clock();
int i,j,high,low,mid,temp;
for(i=1;i<len;i++)
{
temp=A[i];
low=0;high=i-1;
while(low<=high)
{
mid=(low+high)/2;
if(A[0]>temp)
high=mid-1;
else low=mid+1;
}
for(j=i-1;j>high;j--)
A[j+1]=A[j];
A[high+1]=temp;
}
printf("经排序后序列为:\n");
for(i=0;i<len;i++)
{
if(i%10==0)printf("\n");
printf("%d ",A[i]);
}
printf("\n");
finish = clock();
time = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "插入排序法运行时间:" );
printf( "%f seconds\n", time );
return time;
}
double xuanze(int arry[],int n)//选择排序
{
clock_t start, finish;
double time; //测量一个事件持续的时间
start = clock();
int i,j,k,t;
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(arry[j]<arry[k])
k=j;
t=arry[k];
arry[k]=arry[i];
arry[i]=t;
}
printf("经排序后序列为:\n");
for(i=0;i<n;i++)
{
if(i%10==0)printf("\n");
printf("%d ",arry[i]);
}
printf("\n");
finish = clock();
time = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "选择排序法运行时间:" );
printf( "%f seconds\n", time );
return time;
}
int kuaisu(int*c,int low,int high)//快速排序确定枢轴位置
{
int temp,t;
temp=c[low];
while(low<high)
{
while(low<high&&c[high]>=temp)high--;
{
t=c[low];c[low]=c[high];c[high]=t;
}
while(low<high&&c[low]<=temp)low++;
{
t=c[low];c[low]=c[high];c[high]=t;
}
}
return low;
}
void kuaisu1(int *b,int low,int high)//快速排序
{
int t;
if(low<high)
{
t=kuaisu(b,low,high);
kuaisu1(b,low,t-1);
kuaisu1(b,t+1,high);
}

}
void main(void)
{
int i,a[N];
double b[3];
char ch;
for(i=0;i<30;i++)
printf("*");
printf("欢迎进入综合排序系统");
for(i=0;i<30;i++)
printf("*");
printf("\n");
srand((unsigned)time(NULL));//获取随机数
printf("获得%d个随机数:\n",N);
for(i=0;i<N;i++)
a[i]=(rand()%12767+20000)%32767;
for(i=0;i<N;i++)//输出随机数
{
if(i%10==0)printf("\n");
printf("%d ",a[i]);
}
printf("\n");

do
{
for(i=0;i<80;i++)
printf("=");
printf("\t1.冒泡排序\n");
printf("\t2.选择排序\n");
printf("\t3.插入排序\n");
printf("\t4.快速排序\n");
printf("\t5.退出\n");
printf("\t请选择排序方法:\n");
do
{
ch=getchar();
}while(ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5');
switch(ch)
{
case'1': b[0]=maopao(a,N);break;
case'2': b[1]=xuanze(a,N);break;
case'3': b[2]=charru(a,N);break;
case'4':
clock_t start, finish; //测量一个事件持续的时间
double time;
start = clock();
kuaisu1(a,0,N-1);
printf("经排序后序列为:\n");
for(i=0;i<N;i++)
{
if(i%10==0)printf("\n");
printf("%d ",a[i]);
}
printf("\n");
finish = clock();
time = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "快速排序法运行时间:" );
printf( "%f seconds\n", time ); break;
case'5': {
printf("\n");
for(i=0;i<37;i++
)printf("*");
printf("谢谢 !");
for(i=0;i<37;i++)
printf("*");
exit(0);
}
}
}while(1);

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-05
给你一个程序,你看看。。。
//应用一维数组,实现从键盘输入10个整数,输出其中的最小数并将十个数从小到大排列
#include <stdio.h>
#define n 10
main()
{ int i,j,a[n],min,t,s;
printf("输入十个整数:\n");
for (i=0;i<n;i++)
scanf("%d",&a[i]);
printf("排序前 :\n");
for (i=0;i<n;i++)
{
printf(" %d",a[i]);
}

min=a[0];
for(i=0;i<n;i++)
if(min>a[i])
min=a[i];
printf("最小值:%d\n",min);
for(i=0;i<n;i++)
{s=i; //利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,依次类推,即用第二个元素与后8个进行比较,并进行交换。       
for(j=i+1;j<n;j++)
if(a[s]>a[j])
s=j; //利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,依次类推,即用第二个元素与后8个进行比较,并进行交换。       
t=a[i];
a[i]=a[s];
a[s]=t;}
printf("从小到大排列 :\n");
for(i=0;i<n;i++)
printf(" %d",a[i]);
}本回答被网友采纳
第2个回答  2012-12-05
排序例程不是有很多么,在main里输入数据到数组 然后排序呗
第3个回答  2012-12-05
数据结构与算法的书里不都有么?现成的啊。
相似回答