版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件基础上机题之排序算法PAGEPAGE1
年级10级班号5
学号
10064132专业自动化
姓名
刘满实验名称排序算法的相关操作实验类型设计型综合型创新型实验目的或要求实验目的:1.掌握基本的文件读取操作;2.掌握快速排序、冒泡排序算法的实现。实验要求:1.编程实现快速排序、冒泡排序各算法函数;2.编写主函数对各排序函数进行测试实验原理(算法流程)开始
开始输出主菜单选择界面输出主菜单选择界面输入x的值其他:输入x的值输入项无效,请重新输入!x=?x=?1234快速排序退出冒泡快速排序退出冒泡排序显示成绩输入rturn的值输入rturn的值rturn=N假rturn=N真结束结束组内分工(可选)无实验结果分析及心得体会成绩评定教师签名:2010年月日#include"stdafx.h"#include"stdio.h"#include"stdlib.h"#include<time.h>#definen8/*宏定义录入学生成绩的个数*/#defineFILE_PATH"f:\\grade.txt"/*对文件路径进行宏定义*/typedefintKeyType;typedefstruct{ KeyTypegrade; charname[20];}RecType;RecTypeR[n];voidshowagrade();/*读取显示成绩*/voidBubblesort(RecTypeR[]);/*对学生成绩进行冒泡排序,并输出*/voidQuicksort(RecTypeR[],intlow,inthigh);/*对学生成绩进行快速排序,并输出*/intPartition(RecTypeR[],inti,intj);/*分治算法*/voidmenu(){ printf("★★★★★★★★★★★★★★★★★★★★★★★★★★\n"); printf("★1.读取显示成绩★\n"); printf("★2.对学生成绩进行冒泡排序,并输出★\n"); printf("★3.对学生成绩进行快速排序,并输出★\n"); printf("★4.退出★\n"); printf("★★★★★★★★★★★★★★★★★★★★★★★★★★\n");} voidmain(){ inti,x,low,high; charrturn; menu(); while(1) { printf("请选择相应功能:"); fflush(stdin); scanf("%d",&x); switch(x) { case1: //仅显示成绩 showagrade(); printf("仅显示成绩完成,是否继续?(N退出,任意键继续)\n"); fflush(stdin); scanf("%c",&rturn); if(rturn=='N') exit(0); break; case2://对学生成绩进行冒泡排序,并输出 Bubblesort(R); printf("\n"); printf("对学生成绩进行冒泡排序,并输出完成,是否继续?(N退出,任意键继续)\n"); fflush(stdin); scanf("%c",&rturn); if(rturn=='N') exit(0); break; case3://对学生成绩进行快速排序,并输出 Quicksort(R,1,7); for(i=1;i<=7;i++) printf("%d\t",R[i]); printf("\n"); printf("对学生成绩进行快速排序,并输出完成,是否继续?(N退出,任意键继续)\n"); fflush(stdin); scanf("%c",&rturn); if(rturn=='N') exit(0); break; case4: return; default: printf("输入选项无效!请重新输入!\n"); } }}voidshowagrade()/*读取显示成绩*/{ FILE*fp; fp=fopen(FILE_PATH,"r+");/*获得只读文件的地址*/ chartempbuf[100];/*定义字符数组*/ fgets(tempbuf,100,fp);/*从fp指向的文件中读取100个数据到tempbuf*/ charname[20]; intgrade; inti=1; while(i<n) { fscanf(fp,"%*s%d",&R[i]); printf("%d\t",R[i]); i++; } printf("\n"); fclose(fp);}voidBubblesort(RecTypeR[])/*对学生成绩进行冒泡排序,并输出*/{ inti,j,flag=0; RecTypeq; for(i=1;i<7;i++) { for(j=6;j>=i;j--) if(R[j+1].grade<R[j].grade)/*如果R[j+1].grade<R[j].grade,则交换两数据的位置*/ { R[0]=R[j+1]; R[j+1]=R[j]; R[j]=R[0]; flag=1;/*flag=1标志数据进行过移位*/ } if(!flag)/*flag=0说明该组数据原本就是按顺序排定,此时返回系统*/ return; } for(i=1;i<=7;i++) printf("%d\t",R[i]);}voidQuicksort(RecTypeR[],intlow,inthigh)/*对学生成绩进行快速排序,并输出*/{ intpivotpos,i; if(low<high) { pivotpos=Partition(R,low,high);/*调用分治算法*/ Quicksort(R,low,pivotpos-1);/*用递归法进行快速排序*/ Quicksort(R,pivotpos+1,high); }}intPartition(RecTypeR[],inti,intj)/*分治算法,找到基准记录的位置,供快速排序调用*/{ RecTypepivot=R[i]; w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论