利用随机函数产生随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并统计每一种排序上机所花费的时间
#include<stdio.h>
#define MAX 100
void InsertSort(int array[],int n);
void ShellSort(int array[],int n,int dd[],int t);
void BubbleSort(int array[],int n);
void SelectSort(int array[],int n);
void QuickSort(int array[],int min,int max);
void HeapSort(int array[],int n);
void main()
{
int array[MAX],dd[MAX];
int n,s,q,ch;
printf("\n请输入待排序的数的个数:\n");
scanf("%d",&n);
printf("请输入待排序数据:\n");
for(s=0;s<n;s++)
scanf("%d",&array[s]);
printf("1---直接插入排序\n");
printf("2---希尔排序\n");
printf("3---冒泡排序\n");
printf("4---快速排序\n");
printf("5---简单选择排序\n");
printf("6---堆排序\n");
printf("请选择(1-6):\n");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("直接插入排序结果:\n");
InsertSort(array,n);
break;
case 2:
printf("希尔排序结果:\n");
s=n; //初始化一个增量数组
q=0;
while(s>1)
{
dd[q++]=s/2;
s=s/2;
}
//最后一次的增量为1
ShellSort(array,n,dd,q);
break;
case 3:
printf("冒泡排序结果:\n");
BubbleSort(array,n);
break;
case 4:
printf("快速排序结果:\n");
QuickSort(array,0,n-1);
break;
case 5:
printf("简单选择排序结果:\n");
SelectSort(array,n);
break;
case 6:
printf("堆排序结果:\n");
HeapSort(array,n);
break;
default:
return;
}
/*输出排序后的节点序列*/
for(s=0;s<n-1;s++)
printf("%d",array[s]);
printf("%d",array[s]);
printf("\n");
}
/*直接插入排序*/
void InsertSort(int array[],int n)
{
int s,t,q;
s=1;
while(s<n)
{
t=array[s]; /*是一个临时变量*/
for(q=s-1;q>=0&&t<array[q];q--)
array[q+1]=array[q]; /*结点向右移动*/
array[q+1]=t;
s++;
}
}
/*希尔排序*/
void ShellSort(int array[],int n,int dd[],int t)
{
int s,x,k,h;
int y;
for(s=0;s<t;s++)
{
h=dd[s]; /*选取增量*/
for(x=h;x<n;x++)
{
y=array[x];
for(k=x-h;k>=0&&array[k];k-=h)
array[k+h]=array[k]; /*想后移动*/
array[k+h]=y;
}
}
}
/*冒泡排序*/
void BubbleSort(int array[],int n)
{
int s,m,q,t;
m=0;
while(m<n-1) /*如果m==n-1,结束循环*/
{
q=n-1;
for(s=n-1;s>=m+1;s--)
if(array[s]<array[s-1])
{
t=array[s]<array[s-1];
array[s-1]=t;
q=s;
}
m=q;
}
}
/*快速排序*/
void QuickSort(int array[],int min,int max)
{
int head,tail;
int t;
if(min<max)
{
head=min;
tail=max;
t=array[head];
while(head!=tail)
{
while(head<tail&&array[tail]>=t)
tail--;
if(head<tail)
array[head++]=array[tail];
while(head<tail&&array[head]<=t)
head++;
if(head<tail)
array[tail--]=array[head];
}
array[head]=t;
QuickSort(array,min,head-1);
QuickSort(array,tail+1,max);
}
}
/*选择排序*/
void SelectSort(int array[],int n)
{
int k,q,s,t;
for(s=0;s<n;s++)
{
k=s;
for(q=s+1;q<n;q++)
if(array[k]>array[q])
k=q;
t=array[s];
array[s]=array[k];
array[s]=t;
}
}
/*调整为堆*/
void PercDown(int array[],int s,int n)
{
int q;
int t;
t=array[s];
while((q=2*s+1)<n)/*有左孩子*/
{
if(q<n-1&&array[q]<array[q+1])
q++;
if(t<array[q])
{
array[(q-1)/2]=array[q];
s=q;
}
else
break;
}
array[(q-1)/2]=t; /*t放在最后一个位置*/
}
/*堆排序*/
void HeapSort(int array[],int n)
{
int s;
int t;
s=(n-1)/2;
while(s>=0)
{
PercDown(array,s,n);
s--;
}
s=n-1;
while(s>0)
{
t=array[0]; /*交换结点*/
array[0]=array[s];
array[s]=t;
PercDown(array,0,s);
s--;
}
}