成都信息工程学院计算机系
课程实验报告
实验课程: 数据结构
实验项目: 实现算法的全排序 指导教师: 学生姓名: 学生学号: 班 级: 计算机工程1班 实验地点: 6305 实验时间: 2012年 12月2日 — 12月19日 实验成绩: 评阅老师: 1 / 16
(说明:实验报告必须包含下面的每项内容,根据实验情况认真填写,封面必须打印或复印(A4纸),书写上机实验报告内容的纸张也用A4纸,最后从侧面装订)
一【上机实验目的】
目的:从键盘输入一组数,通过内部排序的
12种算法对这组数字进行排序。熟练掌握刚
刚学过的内部排序的算法,并对这12种排序算法的时间复杂度进行比较,根据不同的情况,选择合适的算法
二【实验环境】
PC机每人1台
三【上机实验内容】
实现内部排序的12种排序算法的全排序。
四【上机调试程序流程图】(注:可打印)
(用传统流程图的形式表示)
2 / 16
开始输入10个数字1.插入排序2.选择排序3.快速排序4.归并排序5.基数排序输入要选择的数字如果选择1如果选择2如果选择3如果选择4如果选择51.直接插入排序2.折半插入排序3.2—路插入排序4.希尔排序5.表插入排序1.简单选择排序2.堆排序1.冒泡排序2.快速排序123451212直接插入排序折半插入排序2—路插入排序希尔排序表插入排序简单选择排序堆排序冒泡排序快速排序归并排序基数排序输出结束
五【上机调试中出现的错误信息、错误原因及解决办法】
(记录下你调试程序中出现的错误信息的英文提示,分析出错原因及可能的解决办法)
六【上机调试后的源程序及还存在的问题】(注:源程序可打印)
(同时记录下你对你编写此程序的其它具体想法,) 主要的程序:
/********************************直接插入排序***************************/ void InsertSort(SqList &L) {//直接插入排序 int i,j; for(i=2;i<=L.length;++i) {
3 / 16
if(L.r[i].key<=L.r[i-1].key) { L.r[0]=L.r[i]; L.r[i]=L.r[i-1]; for(j=i-2;(L.r[0].key /*********************************折半插入排序************************/ void BinsertSort(SqList &L) {//折半插入排序 int i,j,low,high,m; for(i=2;i<=L.length;i++) { L.r[0]=L.r[i]; low=1; high=i-1; while(low<=high) { m=(low+high)/2; if(L.r[0].key /**********************************2-路插入排序***********************/ void P2_InsertSort(SqList &L) {//2—路插入排序 int i,j,first,final; RedType *d; d=(RedType*)malloc(L.length*sizeof(RedType)); //生成L.length个记录的临时空间 d[0]=L.r[1]; first=final=0; // first、final分别指示d中排好序的记录的第1个和最后1个记录的位置 for(i=2;i<=L.length;++i) 4 / 16 { //依次将L的第2个~最后1个记录插入d中 if(L.r[i].key /***************************************希尔排序***************************/ void ShellInsert(SqList &L,int dk) { // printf(\ int i,j; for(i=dk+1;i<=L.length;i++) if(L.r[i].key void ShellSort(SqList &L,int dlta[],int t) { // printf(\ 5 / 16