要求:
1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。
2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。
3)如果采用4种或4种以上的方法者,可适当加分。
源程序如下:
#include
//标准输入输出头文件
#include
//定义杂项函数及内存分配函数
#include
//字符串处理
#include //定义关于时间的函数
#define N 20000
clock_t
Start,Now;//时钟
void Wrong()//错误输出
{
printf("\n*****按键错误!请重新输入*****\n");
getchar();//从标准输入获取字符并返回下一个字符
}
void change(int a[])//十个一行输出
{
int i;
system("cls");//清除之前的操作
for(i=0;i
{
if((i-1)==9)
printf("\n");
printf("%-7d",a[i]);
}
}
//二分插入排序
void Sort_efcr (int a[],int p)
{
int
t,i,j,low,high,mid;
for(i=2;i
{
t=a[i];
low=1;
high=i-1;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>t)
high=mid-1;
else low=mid+1;
}
for(j=i-1;j>=low;j--)
a[j+1]=a[j];
a[low]=t;
}
}
//插入排序
void Sort_charu (int a[],int p)
{
int i,j,temp;
for(i=1;i
{
temp=a[i];//设置监视哨
for(j=i;j>0&&a[j-1]>temp;j--)//寻找位置插入
a[j]=a[j-1];//交换
a[j]=temp;
}
}
//选择排序
void sort_xz(int a[],int p)
{
int i,j,k;
for(i=0;i
{
k=i;
for(j=i+1;j
if(a[j]
k=j;//记录
if(k!=i)
{
int temp;
temp=a[k];
a[k]=a[i];
a[i]=temp;
}//交换
}
}
void
sort_mp(int a[],int p)
{
int
i,j,temp;
for
(i=0;i
{
for
(j=N-1;j>i;j--)
if
(a[j]