数据结构课程设计之综合排序代码及使用方法.docx
数据结构课程设计之综合排序代码及使用方法 题目1: 利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。 要求: 1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结 果保存在不同的文件中。 2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。 代码如下: #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;it) high=mid-1; else low=mid+1; for(j=i-1;j>=low;j-) aj+1=aj; alow=t; /插入排序 void Sort_charu (int a,int p) int i,j,temp; for(i=1;i0&&aj-1>temp;j-)/寻找位置插入 aj=aj-1;/交换 aj=temp; /选择排序 void sort_xz(int a,int p) int i,j,k; for(i=0;ii;j-) if (aj temp=aj; aj=aj-1; aj-1=temp; void creatheap(int a,int i,int n) /创建堆 int j; int t; t=ai;/堆顶元素暂存 j=2*(i+1)-1; while(j=0;i-)/在序列的中间位置找一个数做堆顶creatheap(a,i,n-1); for(i=n-1;i>=1;i-)/n-1次筛选 t=a0; a0=ai; ai=t; creatheap(a,0,i-1); /插入排序时间 double TSort_charu(int a,int p) int i;double time; int bN; for(i=0;i=i;j-) if(aj+1 temp=aj+1; aj+1=aj; aj=temp; void menu() printf(" n"); printf(" *尊敬的用户您好* n"); printf(" n"); printf(" *欢迎使用由XXXXXXXXXXXXX 编辑的综合排序系统!* n"); printf(" printf(" n"); printf(" 现在请您做出以下选择n"); printf(" n"); printf(" n"); printf(" * n"); printf(" n"); printf(" * 1:直接插入排序*n"); printf(" * 2:直接选择排序*n"); printf(" * 3:冒泡排序*n"); printf(" * 4:二分插入排序*n"); printf(" * 5:堆排序*n"); printf(" * 6:时间效率比较*n"); printf(" * 7:显示随机数*n"); printf(" * 0:退出*n"); printf(" n"); printf(" * n"); void main() int i,p,aN; double TIMES5,TIMES15;/时间数组 srand(int)time(NULL); for(i=0;i<N;i+) ai=rand() 000+1; /随机为数组赋值 /循环执行,直到按0退出 while(1) system("cls"); menu(); /显示选择界面 scanf("%d",&p); /等待输入 /输入0退出 if(p=0) printf(" *谢谢!欢迎下次使用*!n"); getchar(); break; /判断输入值,选择相应的操作 switch(p) case 1:TSort_charu(a,p);printf("n请按任意键继续.");getchar();break; case 2:Tsort_xz(a,p);printf("n请按任意键继续.");getchar();break; case 3:Tsort_mp(a,p);printf("n请按任意键继续.");getchar();break; case 4:TSort_efcr(a,p);printf("n请按任意键继续.");getchar();break; case 5:Tsort_d(a,N,p);printf("n请按任意键继续.");getchar();break; case 6:system("cls"); TIMES11=TIMES1=TSort_charu(a,p); TIMES12=TIMES2=Tsort_xz(a,p); TIMES13=TIMES3=Tsort_mp(a,p); TIMES14=TIMES4=TSort_efcr(a,p); TIMES15=TIMES5=Tsort_d(a,N,p); getchar(); BubleSort(TIMES); printf("nn"); printf("排序这组数据两种较快的排序法分别是:n"); if(TIMES1=TIMES11) printf("直接插入排序:%f秒!n",TIMES1); if(TIMES1=TIMES12) printf("直接选择排序:%f秒!n",TIMES1); if(TIMES1=TIMES13) printf("冒泡排序:%f秒!n",TIMES1); if(TIMES1=TIMES14) printf("二分插入排序:%f秒!n",TIMES1); if(TIMES1=TIMES15) printf("堆排序:%f秒!n",TIMES1); if(TIMES1!=TIMES2) if(TIMES2=TIMES11) printf("直接插入排序:%f秒!n",TIMES2); if(TIMES2=TIMES12) printf("直接选择排序%f秒!n",TIMES2); if(TIMES2=TIMES13) printf("冒泡排序%f秒!n",TIMES2); if(TIMES2=TIMES14) printf("二分插入排序:%f秒!n",TIMES1); if(TIMES2=TIMES15) printf("堆排序%f秒!n",TIMES2); printf("n请按任意键继续."); srand(int)time(NULL); for(i=0;i<N;i+) ai=rand() 000+1; getchar();break; case 7:change(a);FILE *fp; fp=fopen("F:随机数.txt","w"); for(i=0;i<N;i+) fprintf(fp,"%d ",ai); fclose(fp);getchar(); printf("n请按任意键继续."); getchar();break; default:Wrong(); getchar();break; 可能出现的错误及处理办法: LINK : error LNK2022 无法解析的外部符号_mainCRTStartup 刚安装Microsoft visual C+ 2022 学习版,运行一段代码,出现了如下图错误: 在网上找了半天类似的错误,有说建项目属性=链接器=系统,应该设置为windows,我设置了也不好使。我建项目是严格按照“Win32控制台应用程序”设置的“空项目”,所执行的.cpp文件也有main()方法,那到底错哪儿了呢?最后,再一次看独行剑侠的“Visual C+ 2022入门教程系列二:安装、配置和首次使用VS2022”,才明白我错哪儿了! 错误原因:我原来学的是C语言,c文件在Visual c+ 6.0中创建的步骤是:文件=新建=工程,然后选择“Win32 Console Application” 工程建好之后,再点击文件=新建=文件,选择C语言的h文件,这样新建的h文件也就自动在建好的工程里面了,而我在Visual C+ 2022也按照原来的步骤操作,结果就出现了上面的错误,归根结底还是像“剑侠”文章里所说的,我建的项目是一个空项目,在编译的时候找不到main()方法,虽然我点击文件=新建=文件=Visual C+里面的C+文件(.cpp),但是建好的cpp文件却不是在项目里面,也就是皇帝的新装,写了很多,也无语法错误,但都是裸露的! 解决办法:在建好的项目点击右键=添加=新建项 填写了我要新建cpp文件的名称,最后编译代码,一切比想象的都顺利! PS:看来去年一时的兴起随便学点知识,这问题帮助了不少人哈,说实话,我现在基本全忘完了!呵呵