排序算法比较程序
功能要求如下:
排序算法比较: shellsort, quicksort, heapsort, mergesort 的算法实现 ,
对同样数据集的排序时间比较。
源代码:
# include
# include
# define MAXSIZE 2000
typedef strUCt{
int key[MAXSIZE];
int length;
}list;
long int compCount;
long int shiftCount;
void menu(int *m)/*retun m*/
{
int i;
char menu[6][15]={"1 CREATE ","2 IMPORT ","3 SORT","4 SHOW RESULT",
"5 SAVE RESULT","6 EX99v"};
clrscr();
printf("SORT COMPARE SYSTEM
");
for (i=0;i<6;i++) printf("%s
",menu[i]);
printf("
Please Select (1-6):
");
scanf("%d",m);
}
void menusort(int *m)/*retun m*/
{
int i;
char menusort[5][15]={"1 SHELL SORT","2 QUICK SORT","3 HEAP SORT",
"4 MERGE SORT","5 ALL SORT"};
clrscr();
printf("SORT
");
for(i=0;i<5;i++) printf("%s
",menusort[i]);
printf("
Please Select (1-5):
");
scanf("%d",m);
}
void menushow(int *m)/*retun m*/
{
int i;
char menushow[4][20]={"1 SHELL SORT RESULT","2 QUICK SORT RESULT",
"3 HEAP SORT RESULT","4 MERGE SORT RESULT"};
clrscr();
printf("SHOW SORT RESULT
");
for(i=0;i<4;i++) printf("%s
",menushow[i]);
printf("
Please Select (1-4):
");
scanf("%d",m);
}
void menusave(int *m)
{
int i;
char menusave[4][20]={"1 SHELL SORT RESULT","2 QUICK SORT RESULT",
"3 HEAP SORT RESULT","4 MERGE SORT RESULT"};
clrscr();
printf("SAVE:
");
for (i=0;i<4;i++) printf("%s
",menusave[i]);
printf("
Please Select (1-4):
");
scanf("%d",m);
}
void create(list *L)
{
int i;
printf("HOW MANY DATA?
");
scanf("%d",&((*L).length));
for(i=1;i<=(*L).length;i++)
{
printf("
PLEASE INPUT THE %dth DATA:
",i);
scanf("%d",&(*L).key[i]);
}
printf("
CREATE COMPLETE !
");
}
int listopen(list *L,char *filename)
{
int k=1;
FILE *data;
data=NULL;
data=fopen(filename,"rb");
while (! feof(data))
{
fscanf(data,"%d",&(*L).key[k]);
k++;
}
(*L).length=k-1;
}
void import(list *L)/*fix L*/
{
char filename[255];
int i;
printf("
PLEASE INPUT THE FILE PATH AND NAME:
");
scanf("%s",filename);
clrscr();
listopen(L,filename);
for(i=1;i<(*L).length;i++) printf("%d ",(*L).key[i]);
printf("
PRESS ANYKEY RETURN TO MAINMENU...
");
getch();
}
void save(list L)
{
FILE *data;
char filename[255];
int r;
printf("
PLEASE INPUT THE FILE PATH AND NAME:
");
scanf("%s",filename);
data=fopen(filename,"wb");
for(r=1;r<=L.length;r++) fprintf(data,"%d
",L.key[r]);
fclose(data);
printf("SAVE OK!
PRESS ANY KEY TO RETURN THE MAINMENU... ");
getch();
}
list shellsort(list L)/*retun L_SHELL*/
{
int i,j,gap,x,n;
compCount=shiftCount=0;
n=L.length;
gap=n/2;
while (gap>0)
{
compCount++;
for(i=gap+1;i<=n;i++)
{
compCount++;
j=i-gap;
while(j>0)
{
compCount++;
- 上一篇:排序的各种方法
- 下一篇:偶写的链表、堆栈、队列的集合操作