#include"head.h"
int m;
void print2(int a,int num[])
{
int i;
int k=0;
printf("\n\n\n\t____________________________________________________________________\n");
printf("\t|排序方法 | 关键字比较次数 |关键字移动次数 |\n");
for(i=0;i<a;i++)
{
printf("\t____________________________________________________________________\n");
switch(num[i])
{
case 0 :printf("\t|直接排序 |"); break;
case 1 :printf("\t|希尔排序 |"); break;
case 2 :printf("\t|起泡排序 |"); break;
case 3 :printf("\t|快速排序 |"); break;
case 4 :printf("\t|简单选择排序 |"); break;
case 5 :printf("\t|堆排序 |"); break;
}
printf(" %d ",count[k++]);
printf("%d \n",count[k++]);
}
printf("\t____________________________________________________________________\n");
printf("\n\t\t★★★★★★★★★★★★★★★★★★★★★\n");
printf("\t\t★ ★\n");
printf("\t\t★ 本组数据排序方法比较表 ★\n");
printf("\t\t★ ★\n");
printf("\t\t★★★★★★★★★★★★★★★★★★★★★\n");
}
void close_main() /*结束函数*/
{
printf("\t\t\t 谢 谢 使 用 ! ! !\n");
printf("\t\t\t***********************\n");
printf("\t\t\t |--| |--| \n");
printf("\t\t\t!__| |_|_|_|_|_| |__!\n");
printf("\t\t\t| |\n");
printf("\t\t\t| ^ ^ |\n");
printf("\t\t\t| * * |\n");
printf("\t\t\t| @ @ |\n");
printf("\t\t\t| |\n");
printf("\t\t\t| 0 |\n");
printf("\t\t\t|_____________________|\n");
printf("\t\t\t***********************\n");
exit(0);
}
main()
{
int j;
SqList L1;
int i;
char c='y';
int n=7;
int num[6];
MAX=0;
printf("\n\n\n\n\t\t#############################################\n");
printf("\t\t 各种排序的实现与效率分析 \n");
printf("\t\t(1)对起泡排序、直接排序、简单选择排序、快速排\n");
printf("\t\t 序、希尔排序、堆排序算法进行比较; \n");
printf("\t\t(2)待排序表的表长不小于100,表中数据随机产生,\n");
printf("\t\t 至少用5组不同数据作比较,比较指标有:关键 \n");
printf("\t\t 字参加比较次数和关键字的移动次数 \n");
printf("\t\t(3)输出比较结果。 \n");
printf("\t\t#############################################\n");
getchar();
system("cls");
while(1)
{
srand(time(0));
printf("\t\t★★请问要比较几组数据?★★\n");
scanf("%d",&m);
printf("随机产生%d组数据为:",m);
for(i=0;i<m;i++)
{
L1.r[i+1].key=rand();
L1.r[i+1].otherinfo=i+1;
}
L1.length=m;
print(L1);
i=0;
while(1)
{
while(1)
{
printf("\n\t\t请选择要排序的方法(0-5)\n");
printf("\t\t_________________\n");
printf("\t\t| 0.直接排序 |\n");
printf("\t\t| 1.希尔排序 |\n");
printf("\t\t| 2.起泡排序 |\n");
printf("\t\t| 3.快速排序 |\n");
printf("\t\t| 4.简单选择排序|\n");
printf("\t\t| 5.堆排序 |\n");
printf("\t\t_________________\n");
printf("您的选择:");
printf("\n");
scanf("%d",&j);
while(1)
{
if(j>=0&&j<6)
break;
printf("你输入有误,请从新输入:");
scanf("%d",&j);
}
if(j!=n)
{
switch(j)
{
case 0 : InsertSort_process(L1); break;
case 1 : Shell_taxis(L1);break;
case 2 : bubble_sort(L1);break;
case 3 : Quick_Sort(L1);break;
case 4 : Simple_selectSort(L1);break;
case 5 : Heap_Sort(L1);break;
}
break;
}
else {
printf("\n\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
printf("\t 注意!!!!!!!! \n");
printf("\t你选用的排序方法与你上次选用的排序方法相同,请重新选择其他的排序方法:\n");
printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
printf("\n");
}
}
n=j;
num[i]=j;
i++;
getchar();
printf("\n\t\t★★★★★★★★★★★★★★★★★★★★★★\n");
printf("\t\t★请问还要继续用本组数据进行其他排序吗?(y/n)");
c=getchar();
if(c=='n'||c=='N')
{
n=7;
break;
}
printf("\t\t★★★★★★★★★★★★★★★★★★★★★★\n");
}
printf("\t\t★★★★★★★★★★★★★★★★★★★★★★\n");
printf("\n\t\t★★★★★★★★★★★★★★★★★★★\n");
printf("\t\t★请问是否还要生成新的数据进行排序?(y/n)");
getchar();
c=getchar();
if(c=='n'||c=='N')
break;
system("cls");
print2(i,num);/**/
getchar();
getchar();
MAX=0;/**/
system("cls");
}
system("cls");
print2(i,num);/**/
getchar();
getchar();
system("cls");
close_main();
}