数据结构 课程设计报告(排序算法比较)

数据结构 课程设计报告(排序算法比较)
数据结构 课程设计报告(排序算法比较)

数据结构课程设计报告

学院:计算机科学与工程

专业:计算机科学与技术

班级:09级班

学号:

姓名:

指导老师:

时间: 2010年12月

一、课程设计题目:1、哈夫曼编码的实现

2、城市辖区地铁线路设计

3、综合排序算法的比较

二、小组成员:

三、题目要求:

1.哈夫曼编码的实现

(1)打开若干篇英文文章,统计该文章中每个字符出现的次数,进一步统一各字符出现的概率。

(2)针对上述统计结果,对各字符实现哈夫曼编码

(3)对任意文章,用哈夫曼编码对其进行编码

(4)对任意文章,对收到的电文进行解码

2.某城市要在其各个辖区之间修建地铁来加快经济发展,但由于建设地铁的费用昂贵,因此需要合理安排地铁的建设路线。

(1)从包含各辖区的地图文件中读取辖区的名称和各辖区的直接距离

(2)根据上述读入的信息,给出一种铺设地铁线路的解决方案。使乘客可以沿地铁到达各个辖区,并使总的建设费用最小。

(3)输出应该建设的地铁路线及所需要建设的总里程信息。

3.综合排序算法的比较

各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概的执行时间。试通过随机的数据比较各算法的关键字比较次数和关键字移动的次数。

(1)对以下各种常用的内部排序算法进行比较:

直接插入排序,折半插入排序,二路归并排序,希尔排序,冒泡排序,快速排序,简单选择排序,堆排序,归并排序,基数排序。

(2)待排序的表长不少于100,要求采用随机数。

(3)至少要用5组不同的输入数据做比较:比较的次数为有关键字参加的比较次数和关键字移动的次数

(4)改变数据量的大小,观察统计数据的变化情况。

(5)对试验统计数据进行分析。对各类排序算法进行综合评价。

四、项目安排:

1、小组内分工合作

分工:负责哈夫曼编码的实现,负责城市辖区地铁线路设计,负责综合排序算法的比较。

合作:组内,组外进行交流,组长帮助解决组员的在项目过程中的困难,并控制进度。

五、完成自己的任务:

任务:综合排序算法比较1.思想实现流程图

2.代码的实现#include

#include

#include

#define MAXSIZE 1000 int L[MAXSIZE+1];

int num=100;

开始初始数据

直接排序折

统计排序效率

排序结果

排序优劣

int

count1=0,count2=0,count3=0,count4=0,count5=0,count6=0,count7=0,count8=0,count9=0,count10 =0;

int creatdata() //产生随机数

{

FILE *f;

int row;

row=num/10;

f = fopen("O_data.txt", "wt"); //创建并写入产生的随机数

if(f)

{

for(int i=0; i<10; i++) //控制列

{

for(int j=0; j

{

fprintf(f, "%2d\t", rand()%100); //调用rand()函数控制为两位数

}

fprintf(f, "\n");

}

f close(f);

}

return 0;

}

void zjpx(int L[MAXSIZE]) //直接插入排序

{

creatdata();

int i,j;

for(i=2;i<=num;i++) // 从第二个开始插入

{

i f(L[i]<=L[i-1])

{

L[0]=L[i]; //设置哨兵并记录要插入的值

L[i]=L[i-1];

count2=count2+2; //如果if 成立则此处关键字移动

for(j=i-2;(L[0]

{

L[j+1]=L[j];

count1++; //此处关键字比较

count2++; //如果两次if成立则此处关键字移动

} //记录后移

L[j+1]=L[0]; //插入到正确位置

count2++;

}

c ount1++;

}

printf("直接排序后的结果是:\n关键字比较了%d次\n关键字移动了%d次\n

",count1,count2);

for(i=2;i<=num;i++)

{

p rintf("%2d ",L[i]);

i f(i%10==0)

printf("\n");

}

}

void zbpx(int L[MAXSIZE]) //折半插入排序

{

creatdata();

int i,j,m,low,high; //定义标志

for(i=2;i<=num;++i) // 从第二个开始插入

{

L[0]=L[i];

c ount4++; //此处关键字移动

l ow=1,high=i-1;

while(low<=high) //寻找插入位置

{

m=(low+high)/2; //折半

找到位置

if(L[0]

{

high=m-1;

} //判断是否需要移动位置并将折半区间进一步缩小

else low=m+1;

count3++; //在上次判断的时候已经做了关键字的比较所以比较次数自加

}

for(j=i-1;j>=high+1;j--)

{

L[j+1]=L[j]; //记录后移

count4++; //此处关键字移动

}

L[high+1]=L[0]; //插入记录

count4++; //此处关键字移动

}

printf("折半插入排序后的结果是:\n关键字比较了%d次\n关键字移动了%d次\n ",count3,count4);

for(i=2;i<=num;i++)

{

p rintf("%2d ",L[i]);

i f(i%10==0)

printf("\n ");

}

}

void xepx(int L[MAXSIZE],int num) //希尔排序{

creatdata();

int temp;

int i,j,d;

d=num/2; //确定第一次分组

while(d>=1) //在第一组内进行向后的比较

{

f or(i=d+1;i<=num;i++) //对各组进行排序

{

temp=L[i];

j=i-d;

count6++; //如果while(d>=1)成立则此处有关键字的移动

while((j>0)&&(temp

{

L[j+d]=L[j];

j=j-d;

count6++; //如果while 成立则此处有关键字的移动

}

count5++; //由于组内比较所以此处有关键字的比较

L[j+d]=temp;

count6++; //此处有关键字的移动

}

d=d/2;

}

printf("\n希尔排序后的结果是:\n关键字比较了%d次\n关键字移动了%d次\n ",count5,count6);

for(i=2;i<=num;i++)

{

p rintf("%2d ",L[i]);

i f(i%10==0)

printf("\n ");

}

}

void mppx(int L[MAXSIZE]) //冒泡排序{

creatdata();

int flag=1;

int temp;

for(int i=1;i<=num && flag!=0;i++) //第一层循环排序

{

flag=0;

for(int j=1;j<=(num-i);j++) //第二层循环排序

{

if(L[j]

{

temp = L[j];

L[j] = L[j+1];

L[j+1] = temp; //进行排序

flag=1;

count8=count8+2; //如果if成立则此处有关键字的移动

}

count7++; //由于内部排序上面的if语句此处有关键字的比较

}

}

printf("\n冒泡排序后的结果是:\n关键字比较了%d次\n关键字移动了%d次\n

",count7,count8);

for(i=1;i

{

p rintf("%2d ",L[num-i]);

i f(i%10==0)

printf("\n ");

}

}

void xzpx(int L[MAXSIZE]) //选择排序{

creatdata();

int i,j,k,temp;

for(i=1;i

{

k=i;

f or(j=i+1;j<=num;j++) //查找关键字最小的记录

{

if(L[k]

{

k=j;

} //查到最小记录的关键字然后与第一个数互换位置

count9++; //此处有关键字的比较

if(i!=k)

{

temp=L[i];

L[i]=L[k];

L[k]=temp; //将关键字最小记录与还未排序的第一个数交换

count10+=2; //如果if 成立则关键字有移动(!!!此处有问题显然if肯定有成立的时候所以count10会有值但是测试结果一直是0 搞不清原因)

}

}

}

printf("\n选择排序后的结果是:\n关键字比较了%d次\n关键字移动了%d次\n ",count9,count10);

for(i=1;i

{

p rintf("%2d ",L[num-i]);

i f(i%10==0)

printf("\n ");

}

}

/*int partition(int L[MAXSIZE],int low,int high)

{

int temp,t;

int i,j,pos,flag;

int change1,change2;

temp=L[1]; //保存该元素的值

pos=low; //记录当前位置

change1=change2=0; //记录每次比较的起始元素,距离区间头或尾的偏移量

do

{

f lag=1; //没有元素交换

f or(i=high-change1;i>=pos+1;i--) //在左区间进行比较

{

if(L[i]

{

t=L[pos];

L[pos]=L[i];

L[i]=t;

pos=i; flag=0; change1++; //记录新的位置pos,偏移量增加

break;

}

}

i f(flag==0) //如果左区间有元素发生移动,则对右区间进行比较

{

flag=1;

for(j=low+change2;j<=pos-1;j++) //从右区间的起始位置开始,一直到基准元素所处的位置

{

if(L[j]>temp)

{

t=L[j];

L[j]=L[pos];

L[pos]=t;

pos=j; flag=0; change2++;break; //如果有元素交换,flag置0,记录新的位置,偏移量增加

}

}

}

}while(flag==0);

for(i=0;i<=7;i++)

p rintf("%d ",*(a+i));

printf("\n\n");

return pos;

}

void kspx(int L[MAXSIZE],int b,int t)

{

creatdata();

int i;

if(b

{

i=partition(L,b,t); //对区间(b,t)进行第一次划分

k spx(L,b,i-1); //左区间进行划分

k spx(L,i+1,t); //右区间进行划分

}

}

*/

void compare(int L[MAXSIZE])

{

printf("排序方式直接折半希尔冒泡选择\n");

printf("比较次数%4d %4d %4d %4d %4d \n",count1,count3,count5,count7,count9);

printf("移动次数%4d %4d %4d %4d %4d \n",count2,count4,count6,count8,count10); }

void menu(int L[MAXSIZE])

{

int x;

printf(" \n1 直接排序 4 冒泡排序7比较数据统计\n");

printf(" ");

printf(" \n2 折半排序 5 快速排序(未完成) 0 退出\n");

printf(" ");

printf(" \n3 希尔排序6选择排序\n");

printf(" ");

printf("\n请输入对应的序号查看结果\n");

scanf("%d",&x);

if(x>=0&&x<=7)

{

s witch(x)

{

c ase 0:exit(0);

c ase 1:zjpx(L);menu(L);break;

c ase 2:zbpx(L);menu(L);break;

c ase 3:xepx(L,num);menu(L);break;

c ase 4:mppx(L);menu(L);break;

// case 5:kspx(L,0,10);menu(L);break;

c ase 6:xzpx(L);menu(L);break;

c ase 7:compare(L);menu(L);break;

}

}

else

{

p rintf("输入有误!");

m enu(L);

}

}

void main()

{

creatdata();

FILE* fp;

int i=0;

fp=fopen("O_data.txt","r"); //只读

if(fp==NULL) //失败

{

p rintf("错误!");

e xit(1); //中止程序

}

while(!feof(fp)) //从文件读出数据

f scanf(fp,"%d",&(L[i++]));

fclose(fp);

printf("随机生成的数为:\n");

for(i=0;i

{

i f(i%10==0)

p rintf("\n");

p rintf("%2d ",L[i]);

}

printf("\n");

menu(L);

}

3.实验数据分析:

本实验共成功测试了5个排序方法,除了选择排序的关键字比较出现问题外实验结果全部合理正确,在统计关键字比较以及移动的问题上,与预想的结果相差不大,可以认为测试基本成功。

4.算法优劣综合比较:

数据结果表明,在数据量很小的情况下,几种排序算法的效率几乎没有太大差异,当数据量很大时,几种排序的效率差异才较为明显,综合比较之下,希尔排序的效率是最高的,而冒泡排序的效率是最低的,其他各种排序方法会根据数据的不同有稍微的差异。

数据结构课程设计(内部排序算法比较_C语言)

数据结构课程设计 课程名称:内部排序算法比较 年级/院系:11级计算机科学与技术学院 姓名/学号: 指导老师: 第一章问题描述 排序是数据结构中重要的一个部分,也是在实际开发中易遇到的问题,所以研究各种排算法的时间消耗对于在实际应用当中很有必要通过分析实际结合算法的特性进行选择和使用哪种算法可以使实际问题得到更好更充分的解决!该系统通过对各种内部排序算法如直接插入排序,冒泡排序,简单选择排序,快速排序,希尔排序,堆排序、二路归并排序等,以关键码的比较次数和移动次数分析其特点,并进行比较,估算每种算法的时间消耗,从而比较各种算法的优劣和使用情况!排序表的数据是多种不同的情况,如随机产生数据、极端的数据如已是正序或逆序数据。比较的结果用一个直方图表示。

第二章系统分析 界面的设计如图所示: |******************************| |-------欢迎使用---------| |-----(1)随机取数-------| |-----(2)自行输入-------| |-----(0)退出使用-------| |******************************| 请选择操作方式: 如上图所示该系统的功能有: (1):选择1 时系统由客户输入要进行测试的元素个数由电脑随机选取数字进行各种排序结果得到准确的比较和移动次数并 打印出结果。 (2)选择2 时系统由客户自己输入要进行测试的元素进行各种排序结果得到准确的比较和移动次数并打印出结果。 (3)选择0 打印“谢谢使用!!”退出系统的使用!! 第三章系统设计 (I)友好的人机界面设计:(如图3.1所示) |******************************| |-------欢迎使用---------| |-----(1)随机取数-------| |-----(2)自行输入-------| |-----(0)退出使用-------|

数据结构课程设计

1.一元稀疏多项式计算器 [问题描述] 设计一个一元稀疏多项式简单计算器。 [基本要求] 输入并建立多项式; 输出多项式,输出形式为整数序列:n, c1, e1, c2, e2,……, cn, en ,其中n是多项式的项数,ci, ei分别是第i项的系数和指数,序列按指数降序排序; 多项式a和b相加,建立多项式a+b; 多项式a和b相减,建立多项式a-b; [测试数据] (2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9-x+12x-3) (1+x+x2+x3+x4+x5)+(-x3-x4)=(x5+x2+x+1) (x+x3)+(-x-x3)=0 (x+x2+x3)+0=(x3+x2+x) [实现提示] 用带头结点的单链表存储多项式,多项式的项数存放在头结点中。 2.背包问题的求解 [问题描述] 假设有一个能装入总体积为T的背包和n件体积分别为w1, w2, …,wn的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1+w2+…+wn=T,要求找出所有满足上述条件的解。例如:当T=10,各件物品的体积为{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2)、(1,4,5)、(8,2)、(3,5,2) [实现提示] 可利用回溯法的设计思想来解决背包问题。首先,将物品排成一列,然后顺序选取物品转入背包,假设已选取了前i件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品“太大”不能装入,则弃之而继续选取下一件,直至背包装满为止。但如果在剩余的物品中找不到合适的物品以填满背包,则说明“刚刚”装入背包的那件物品“不合适”,应将它取出“弃之一边”,继续再从“它之后”的物品中选取,如此重复,直至求得满足条件的解,或者无解。 由于回溯求解的规则是“后进先出”因此自然要用到栈。 3.完全二叉树判断 用一个二叉链表存储的二叉树,判断其是否是完全二叉树。 4.最小生成树求解(1人) 任意创建一个图,利用克鲁斯卡尔算法,求出该图的最小生成树。 5.最小生成树求解(1人) 任意创建一个图,利用普里姆算法,求出该图的最小生成树。 6.树状显示二叉树 编写函数displaytree(二叉树的根指针,数据值宽度,屏幕的宽度)输出树的直观示意图。输出的二叉树是垂直打印的,同层的节点在同一行上。 [问题描述] 假设数据宽度datawidth=2,而屏幕宽度screenwidth为64=26,假设节点的输出位置用 (层号,须打印的空格数)来界定。 第0层:根在(0,32)处输出;

算法排序问题实验报告

《排序问题求解》实验报告 一、算法的基本思想 1、直接插入排序算法思想 直接插入排序的基本思想是将一个记录插入到已排好序的序列中,从而得到一个新的,记录数增1 的有序序列。 直接插入排序算法的伪代码称为InsertionSort,它的参数是一个数组A[1..n],包含了n 个待排序的数。用伪代码表示直接插入排序算法如下: InsertionSort (A) for i←2 to n do key←A[i] //key 表示待插入数 //Insert A[i] into the sorted sequence A[1..i-1] j←i-1 while j>0 and A[j]>key do A[j+1]←A[j] j←j-1 A[j+1]←key 2、快速排序算法思想 快速排序算法的基本思想是,通过一趟排序将待排序序列分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,以达到整个序列有序。 假设待排序序列为数组A[1..n],首先选取第一个数A[0],作为枢轴(pivot),然后按照下述原则重新排列其余数:将所有比A[0]大的数都排在它的位置之前,将所有比A[0] 小的数都排在它的位置之后,由此以A[0]最后所在的位置i 作为分界线,将数组A[1..n]分成两个子数组A[1..i-1]和A[i+1..n]。这个过程称作一趟快速排序。通过递归调用快速排序,对子数组A[1..i-1]和A[i+1..n]排序。 一趟快速排序算法的伪代码称为Partition,它的参数是一个数组A[1..n]和两个指针low、high,设枢轴为pivotkey,则首先从high 所指位置起向前搜索,找到第一个小于pivotkey 的数,并将其移到低端,然后从low 所指位置起向后搜索,找到第一个大于pivotkey 的数,并将其移到高端,重复这两步直至low=high。最后,将枢轴移到正确的位置上。用伪代码表示一趟快速排序算法如下: Partition ( A, low, high) A[0]←A[low] //用数组的第一个记录做枢轴记录 privotkey←A[low] //枢轴记录关键字 while low=privotkey do high←high-1 A[low]←A[high] //将比枢轴记录小的记录移到低端 while low

《数据结构与算法分析》课程设计:顺序表、单链表、顺序栈、查找、排序算法

*******大学 《数据结构与算法分析》课程设计 题目:数据结构上机试题 学生姓名: 学号: 专业:信息管理与信息系统 班级: 指导教师: 2014年04月

目录 一、顺序表的操作 (2) 【插入操作原理】 (2) 【删除操作原理】 (2) 【NO.1代码】 (3) 【运行截图演示】 (7) 二、单链表的操作 (10) 【创建操作原理】 (10) 【插入操作原理】 (10) 【删除操作原理】 (10) 【NO.2代码】 (11) 【运行截图演示】 (20) 三、顺序栈的操作 (25) 【数值转换原理】 (25) 【NO.3代码】 (26) 【运行截图演示】 (30) 四、查找算法 (32) 【顺序查找原理】 (32) 【折半查找原理】 (32) 【NO.4代码】 (33) 【运行截图演示】 (38) 五、排序算法 (40) 【直接插入排序原理】 (40) 【快速排序原理】 (40) 【NO.5代码】 (41) 【运行截图演示】 (46)

一、顺序表的操作 (1)插入元素操作:将新元素x 插入到顺序表a 中第i 个位置; (2)删除元素操作:删除顺序表a 中第i 个元素。 【插入操作原理】 线性表的插入操作是指在线性表的第i-1个数据元素和第i 个数据元素之间插入一个新的数据元素,就是要是长度为n 的线性表: ()11,,,,,i i n a a a a -………… 变成长度为n+1的线性表: ()11,,,,,,i i n a a b a a -………… 数据元素1i a -和i a 之间的逻辑关系发生了变化。 (其【插入原理】在课本P23的算法2.3有解释) 【删除操作原理】 反之,线性表的删除操作是使长度为n 的线性表: ()111,,,,,,i i i n a a a a a -+………… 变成长度为n-1的线性表: ()111,,,,,i i n a a a a -+………… 数据元素1i a -、i a 和1i a +之间的逻辑关系发生变化,为了在存储结构上放映这个变化,同样需要移动元素。 (其【删除原理】在课本P24的算法2.4有解释)

数据结构课程设计报告---几种排序算法的演示(附源代码)

? & 数据结构课程设计报告 —几种排序算法的演示( ; 时间:2010-1-14 … 一需求分析

运行环境 Microsoft Visual Studio 2005 程序所实现的功能 对直接插入排序、折半插入排序、冒泡排序、简单选择排序、快速排序、堆排序、归并排序算法的演示,并且输出每一趟的排序情况。 程序的输入(包含输入的数据格式和说明) % <1>排序种类三输入 <2>排序数的个数的输入 <3>所需排序的所有数的输入 程序的输出(程序输出的形式) <1>主菜单的输出 <2>每一趟排序的输出,即排序过程的输出 " 二设计说明 算法设计思想 <1>交换排序(冒泡排序、快速排序) 交换排序的基本思想是:对排序表中的数据元素按关键字进行两两比较,如果发生逆序(即排列顺序与排序后的次序正好相反),则两者交换位置,直到所有数据元素都排好序为止。 <2>插入排序(直接插入排序、折半插入排序) % 插入排序的基本思想是:每一次设法把一个数据元素插入到已经排序的部分序列的合适位置,使得插入后的序列仍然是有序的。开始时建立一个初始的有序序列,它只包含一个数据元素。然后,从这个初始序列出发不断插入数据元素,直到最后一个数据元素插到有序序列后,整个排序工作就完成了。 <3>选择排序(简单选择排序、堆排序) 选择排序的基本思想是:第一趟在有n个数据元素的排序表中选出关键字最小的数据元素,然后在剩下的n-1个数据元素中再选出关键字最小(整个数据表中次小)的数据元素,依次重复,每一趟(例如第i趟,i=1,…,n-1)总是在当前剩下的n-i+1个待排序数据元素中选出关键字最小的数据元素,作为有序数据元素序列的第i个数据元素。等到第n-1趟选择结束,待排序数据元素仅剩下一个时就不用再选了,按选出的先后次序所得到的数据元素序列即为有序序列,排序即告完成。 <4>归并排序(两路归并排序) 两路归并排序的基本思想是:假设初始排序表有n个数据元素,首先把它看成是长度为

排序算法课程设计

排序算法课程设计 专业 班级 学号 姓名 指导老师

一:课程设计的目的 1.掌握各种排序的基本思想 2.掌握各种排序的算法实现 3.掌握各种排序的算法优劣分析花费的时间计算 4.掌握各种排序算法所适用的不同场合。 二:课程设计的内容 (1)冒泡、直插、选择、快速、希尔、归并、堆排序算法进行比较; (2)待排序的元素的关键字为整数。其中的数据用伪随机产生程序产生(如10000个,1000个),再使用各种算法对其进行排序,记录其排序时间,再汇总比较;(3)将每次测试所用的时间,用条形图进行表示,以便比较各种排序的优劣。 三:课程设计的实现 (1)直接插入排序 #include typedef int keytype; struct datatype { keytype key; }; /* int rand(void); void srand(unsigned int seed ); */ #include #include #include #include void InsertSort (datatype a[], int n) //用直接插入法对a[0]--a[n-1]排序 { int i, j; datatype temp; for(i=0; i

while(j > -1 && temp.key <= a[j].key) { a[j+1] = a[j]; j--; } a[j+1] = temp; } } void main() { /*srand((unsigned)time(NULL));// 随机种子*/ /*time_t t; srand((unsigned)time(&t));*/ time_t t1,t2; srand((unsigned)GetCurrentTime()); datatype num[10000]; t1=GetCurrentTime(); for(int i=0;i<10000;i++) { num[i].key=rand(); } int n=10000; InsertSort(num,n); for(int j=0;j<10000;j++) cout< /* int rand(void); void srand(unsigned int seed ); */ #include #include #include #include typedef int keytype; struct datatype { keytype key;

数据结构课程设计-排序

一、问题描述 1、排序问题描述 排序是计算机程序设计的一种重要操作,他的功能是将一组任意顺序数据元素(记录),根据某一个(或几个)关键字按一定的顺序重新排列成为有序的序列。简单地说,就是将一组“无序”的记录序列调整为“有序”的记录序列的一种操作。 本次课程设计主要涉及几种常用的排序方法,分析了排序的实质,排序的应用,排序的分类,同时进行各排序方法的效率比较,包括比较次数和交换次数。我们利用java语言来实现本排序综合系统,该系统包含了:插入排序、交换排序、选择排序、归并排序。其中包括: (1)插入排序的有关算法:不带监视哨的直接插入排序的实现; (2)交换排序有关算法:冒泡排序、快速排序的实现; (3)选择排序的有关算法:直接选择排序、堆排序的实现; (4)归并排序的有关算法:2-路归并排序的实现。 2、界面设计模块问题描述 设计一个菜单式界面,让用户可以选择要解决的问题,同时可以退出程序。界面要求简洁明了,大方得体,便于用户的使用,同时,对于用户的错误选择可以进行有效的处理。 二、问题分析 本人设计的是交换排序,它的基本思想是两两比较带排序记录的关键字,若两个记录的次序相反则交换这两个记录,直到没有反序的记录为止。应用交换排序基本思想的主要排序方法有冒泡排序和快速排序。 冒泡排序的基本思想是:将待排序的数组看作从上到下排列,把关键字值较小的记录看作“较轻的”,关键字值较大的纪录看作“较重的”,较小关键字值的记录好像水中的气泡一样,向上浮;较大关键字值的纪录如水中的石块向下沉,当所有的气泡都浮到了相应的位置,并且所有的石块都沉到了水中,排序就结束了。 冒泡排序的步骤: 1)置初值i=1; 2)在无序序列{r[0],r[1],…,r[n-i]}中,从头至尾依次比较相邻的两个记录r[j] 与r[j+1](0<=j<=n-i-1),若r[j].key>r[j+1].key,则交换位置; 3)i=i+1; 4)重复步骤2)和3),直到步骤2)中未发生记录交换或i=n-1为止; 要实现上述步骤,需要引入一个布尔变量flag,用来标记相邻记录是否发生交换。 快速排序的基本思想是:通过一趟排序将要排序的记录分割成独立的两个部分,其中一部分的所有记录的关键字值都比另外一部分的所有记录关键字值小,然后再按此方法对这两部分记录分别进行快速排序,整个排序过程可以递归进行,以此达到整个记录序列变成有序。 快速排序步骤: 1)设置两个变量i、j,初值分别为low和high,分别表示待排序序列的起始下

数据结构课程设计排序算法总结

排序算法: (1) 直接插入排序 (2) 折半插入排序(3) 冒泡排序 (4) 简单选择排序 (5) 快速排序(6) 堆排序 (7) 归并排序 【算法分析】 (1)直接插入排序;它是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好的序的有序表中,从而得到一个新的、记录数增加1的有序表。 (2)折半插入排序:插入排序的基本操作是在一个有序表中进行查找和插入,我们知道这个查找操作可以利用折半查找来实现,由此进行的插入排序称之为折半插入排序。折半插入排序所需附加存储空间和直接插入相同,从时间上比较,折半插入排序仅减少了关键字间的比较次数,而记录的移动次数不变。 (3)冒泡排序:比较相邻关键字,若为逆序(非递增),则交换,最终将最大的记录放到最后一个记录的位置上,此为第一趟冒泡排序;对前n-1记录重复上操作,确定倒数第二个位置记录;……以此类推,直至的到一个递增的表。 (4)简单选择排序:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换之。 (5)快速排序:它是对冒泡排序的一种改进,基本思想是,通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 (6)堆排序: 使记录序列按关键字非递减有序排列,在堆排序的算法中先建一个“大顶堆”,即先选得一个关键字为最大的记录并与序列中最后一个记录交换,然后对序列中前n-1记录进行筛选,重新将它调整为一个“大顶堆”,如此反复直至排序结束。 (7)归并排序:归并的含义是将两个或两个以上的有序表组合成一个新的有序表。假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序称为2-路归并排序。 【算法实现】 (1)直接插入排序: void InsertSort(SqList &L){ for(i=2;i<=L.length ;i++) if(L.elem[i]L.elem[0];j--) L.elem [j+1]=L.elem [j]; L.elem [j+1]=L.elem[0]; } } (2)折半插入排序:

数据结构课程设计(内部排序算法比较 C语言)

课题:内部排序算法比较 第一章问题描述 排序是数据结构中重要的一个部分,也是在实际开发中易遇到的问题,所以研究各种排算法的时间消耗对于在实际应用当中很有必要通过分析实际结合算法的特性进行选择和使用哪种算法可以使实际问题得到更好更充分的解决!该系统通过对各种内部排序算法如直接插入排序,冒泡排序,简单选择排序,快速排序,希尔排序,堆排序、二路归并排序等,以关键码的比较次数和移动次数分析其特点,并进行比较,估算每种算法的时间消耗,从而比较各种算法的优劣和使用情况!排序表的数据是多种不同的情况,如随机产生数据、极端的数据如已是正序或逆序数据。比较的结果用一个直方图表示。 第二章系统分析 界面的设计如图所示: |******************************| |-------欢迎使用---------| |-----(1)随机取数-------|

|-----(2)自行输入-------| |-----(0)退出使用-------| |******************************| 请选择操作方式: 如上图所示该系统的功能有: (1):选择 1 时系统由客户输入要进行测试的元素个数由电脑随机选取数字进行各种排序结果得到准确的比较和移动次数并打印出结果。 (2)选择 2 时系统由客户自己输入要进行测试的元素进行各种排序结果得到准确的比较和移动次数并打印出结果。 (3)选择0 打印“谢谢使用!!”退出系统的使用!! 第三章系统设计 (I)友好的人机界面设计:(如图3.1所示) |******************************| |-------欢迎使用---------| |-----(1)随机取数-------| |-----(2)自行输入-------| |-----(0)退出使用-------| |******************************| (3.1) (II)方便快捷的操作:用户只需要根据不同的需要在界面上输入系统提醒的操作形式直接进行相应的操作方式即可!如图(3.2所示) |******************************| |-------欢迎使用---------| |-----(1)随机取数-------| |-----(2)自行输入-------| |-----(0)退出使用-------|

数据结构课程设计排序实验报告

《数据结构》课程设计报告 专业 班级 姓名 学号 指导教师 起止时间

课程设计:排序综合 一、任务描述 利用随机函数产生n个随机整数(20000以上),对这些数进行多种方法进行排序。(1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。 (2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。 要求:根据以上任务说明,设计程序完成功能。 二、问题分析 1、功能分析 分析设计课题的要求,要求编程实现以下功能: (1)随机生成N个整数,存放到线性表中; (2)起泡排序并计算所需时间; (3)简单选择排序并计算时间; (4)希尔排序并计算时间; (5)直接插入排序并计算所需时间; (6)时间效率比较。 2、数据对象分析 存储数据的线性表应为顺序存储。 三、数据结构设计 使用顺序表实现,有关定义如下: typedef int Status; typedef int KeyType ; //设排序码为整型量 typedef int InfoType; typedef struct { //定义被排序记录结构类型 KeyType key ; //排序码 I nfoType otherinfo; //其它数据项 } RedType ; typedef struct { RedType * r; //存储带排序记录的顺序表 //r[0]作哨兵或缓冲区 int length ; //顺序表的长度 } SqList ; //定义顺序表类型 四、功能设计 (一)主控菜单设计

数据结构课程设计报告---几种排序算法的演示(附源代码)

数据结构课程设计报告 —几种排序算法的演示 时间:2010-1-14 一需求分析 运行环境 Microsoft Visual Studio 2005

程序所实现的功能 对直接插入排序、折半插入排序、冒泡排序、简单选择排序、快速排序、堆排序、归并排序算法的演示,并且输出每一趟的排序情况。 程序的输入(包含输入的数据格式和说明) <1>排序种类三输入 <2>排序数的个数的输入 <3>所需排序的所有数的输入 程序的输出(程序输出的形式) <1>主菜单的输出 <2>每一趟排序的输出,即排序过程的输出 二设计说明 算法设计思想 <1>交换排序(冒泡排序、快速排序) 交换排序的基本思想是:对排序表中的数据元素按关键字进行两两比较,如果发生逆序(即排列顺序与排序后的次序正好相反),则两者交换位置,直到所有数据元素都排好序为止。 <2>插入排序(直接插入排序、折半插入排序) 插入排序的基本思想是:每一次设法把一个数据元素插入到已经排序的部分序列的合适位置,使得插入后的序列仍然是有序的。开始时建立一个初始的有序序列,它只包含一个数据元素。然后,从这个初始序列出发不断插入数据元素,直到最后一个数据元素插到有序序列后,整个排序工作就完成了。 <3>选择排序(简单选择排序、堆排序)

选择排序的基本思想是:第一趟在有n个数据元素的排序表中选出关键字最小的数据元素,然后在剩下的n-1个数据元素中再选出关键字最小(整个数据表中次小)的数据元素,依次重复,每一趟(例如第i趟,i=1,…,n-1)总是在当前剩下的n-i+1个待排序数据元素中选出关键字最小的数据元素,作为有序数据元素序列的第i个数据元素。等到第n-1趟选择结束,待排序数据元素仅剩下一个时就不用再选了,按选出的先后次序所得到的数据元素序列即为有序序列,排序即告完成。 <4>归并排序(两路归并排序) 两路归并排序的基本思想是:假设初始排序表有n个数据元素,首先把它看成是长度为1的首尾相接的n个有序子表(以后称它们为归并项),先做两两归并,得n/2上取整个长度为2的归并项(如果n为奇数,则最后一个归并项的长度为1);再做两两归并,……,如此重复,最后得到一个长度为n的有序序列。 程序的主要流程图

数据结构 课程设计报告(排序算法比较)

数据结构课程设计报告 学院:计算机科学与工程 专业:计算机科学与技术 班级:09级班 学号: 姓名: 指导老师: 时间: 2010年12月

一、课程设计题目:1、哈夫曼编码的实现 2、城市辖区地铁线路设计 3、综合排序算法的比较 二、小组成员: 三、题目要求: 1.哈夫曼编码的实现 (1)打开若干篇英文文章,统计该文章中每个字符出现的次数,进一步统一各字符出现的概率。 (2)针对上述统计结果,对各字符实现哈夫曼编码 (3)对任意文章,用哈夫曼编码对其进行编码 (4)对任意文章,对收到的电文进行解码 2.某城市要在其各个辖区之间修建地铁来加快经济发展,但由于建设地铁的费用昂贵,因此需要合理安排地铁的建设路线。 (1)从包含各辖区的地图文件中读取辖区的名称和各辖区的直接距离 (2)根据上述读入的信息,给出一种铺设地铁线路的解决方案。使乘客可以沿地铁到达各个辖区,并使总的建设费用最小。 (3)输出应该建设的地铁路线及所需要建设的总里程信息。 3.综合排序算法的比较 各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概的执行时间。试通过随机的数据比较各算法的关键字比较次数和关键字移动的次数。 (1)对以下各种常用的内部排序算法进行比较: 直接插入排序,折半插入排序,二路归并排序,希尔排序,冒泡排序,快速排序,简单选择排序,堆排序,归并排序,基数排序。 (2)待排序的表长不少于100,要求采用随机数。 (3)至少要用5组不同的输入数据做比较:比较的次数为有关键字参加的比较次数和关键字移动的次数 (4)改变数据量的大小,观察统计数据的变化情况。 (5)对试验统计数据进行分析。对各类排序算法进行综合评价。 四、项目安排: 1、小组内分工合作 分工:负责哈夫曼编码的实现,负责城市辖区地铁线路设计,负责综合排序算法的比较。 合作:组内,组外进行交流,组长帮助解决组员的在项目过程中的困难,并控制进度。 五、完成自己的任务:

数据结构课程设计(附代码)

上海应用技术学院课程设计报告 课程名称《数据结构课程设计》 设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级 姓名学号指导教师日期 一.目的与要求 1. 巩固和加深对常见数据结构的理解和掌握 2. 掌握基于数据结构进行算法设计的基本方法 3. 掌握用高级语言实现算法的基本技能 4. 掌握书写程序设计说明文档的能力 5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力 二.课程设计内容说明 1. 项目一 (1) 对设计任务内容的概述 学生成绩管理** 任务:要求实现对学生资料的录入、浏览、插入和删除等功能。 输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。存储结构:采用线性链式结构。 (2) 详细设计 LinkList *create():输入学生成绩记录函数; void print(LinkList *head):显示全部记录函数 LinkList *Delete(LinkList *head):删除记录函数 LinkList *Insert(LinkList *head):插入记录函数 void menu_select():菜单选择 void ScoreManage():函数界面

(3) 程序流程图 (4) 程序模块及其接口描述 该程序可以分为以下几个模块: 1、菜单选择:void menu_select(); 提供五种可以选择的操作,在main函数中通过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。

几种排序算法的平均性能比较(实验报告)

实验课程:算法分析与设计 实验名称:几种排序算法的平均性能比较(验证型实验) 实验目标: (1)几种排序算法在平均情况下哪一个更快。 (2)加深对时间复杂度概念的理解。 实验任务: (1)实现几种排序算法(selectionsort, insertionsort,bottomupsort,quicksort, 堆排序)。对于快速分类,SPLIT中的划分元素采用三者A(low),A(high),A((low+high)/2)中其值居中者。(2)随机产生20组数据(比如n=5000i,1≤i≤20)。数据均属于围(0,105)的整数。对于同一组数据,运行以上几种排序算法,并记录各自的运行时间(以毫秒为单位)。 (3)根据实验数据及其结果来比较这几种分类算法的平均时间和比较次数,并得出结论。实验设备及环境: PC;C/C++等编程语言。 实验主要步骤: (1)明确实验目标和具体任务; (2)理解实验所涉及的几个分类算法; (3)编写程序实现上述分类算法; (4)设计实验数据并运行程序、记录运行的结果; (5)根据实验数据及其结果得出结论; (6)实验后的心得体会。 问题分析(包括问题描述、建模、算法的基本思想及程序实现的技巧等): 选择排序:令A[1…n]为待排序数组,利用归纳法,假设我们知道如何对后n-1个元素排序,即对啊[A…n]排序。对某个j,1<=j<=n,设A[j]是最小值。首先,如果就!=1,我们交换A[1]和A[j]。然后由假设,已知如何对A[2..n]排序,因此可对在A[2…n]中的元素递归地排序。可把递归改为迭代。算法程序实现如下: void SelectionSort(int *Array,int n,int &c) { int i,j,k; int aa; c=0; for(i=0;i

排序算法的实现与演示需求分析报告

需 求 分 析 报 告 课程设计题目:排序算法实现与演示系统专业:计算机科学与技术 班级: 姓名:

一.问题的提出 1.1编写目的 排序在人们的日常生活和学习、科研、生产等各个方面有着重要的应用。因此掌握常用的排序算法是很必要的。此次设计拟开发一个排序算法演示系统,以提高对排序算法的掌握程度。 本系统实现各种内部排序:直接插入排序、冒泡排序、直接选择排序、希尔排序、快速排序、堆排序、归并排序演。用户可以选择排序算法以演示输入数据在该排序算法下的排序过程。 1.2项目背景 课程设计题目:排序算法实现与演示系统 本课题的指导老师: 本课题的任务开发者: 该设计系统与其他系统的关系:相辅相成,紧密相关 1.3定义 文档中所用到的专业术语: 1.4参考资料

[1] 李云清,杨庆红.数据结构(C语言版).北京:人民邮电出版社,2004. [2]严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版.1997. [3] 苏光奎,李春葆.数据结构导学.北京:清华大学出版.2002. [4] 周海英,马巧梅,靳雁霞.数据结构与算法设计.北京:国防工业出版社,2007. [5] 张海藩. 软件工程导论. 北京:清华大学出版社.2003. 随着计算机的普及,数据结构的应用与开发也深入我们的生活学习当中,其中排序算法也影响极深,通过这次排序算法的实现,希望更多人可以学会并运用排序算法。 二.任务概述 2.1目标 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。 2.2运行环境 Microsoft Visual C++ 2008 2.3用户的特点 排序算法实现与演示系统使用者:具有一定的计算机操作能力和知识。 系统调用人员:具有很高的专业知识水平,理解排序算法实现与演示系统的运行机制,可以对开放代码进行阅读和分析,以完成其系统独特的需求。 2.4条件与限制 课程设计代码编写测试时间短、技术力量弱,设备具有约束性。 三.数据描述

数据结构-多关键字排序课设报告

目录 一.设计题目 (2) 二.需求分析 (2) 1.程序设计问题描述 (2) 2.基本要求 (2) 3.流程图 (2) 三.详细设计 (3) 1.数据结构定义 (4) 2.主要算法设计 (5) 3.函数调用关系图 (8) 4.程序主要流程 (8) 四.调试分析 (13) 五.用户手册 (15) 六.测试结果 (19) 七.源代码(带注释) (21) 八.参考文献 (26)

一.设计题目 多关键字排序 二.需求分析 1.程序设计问题描述 多关键字的排序有其一定的实用范围。例如:在进行高考分数处理时,除了需对总分进行排序外,不同的专业对单科分数的要求不同,因此尚需在总分相同的情况下,按用户提出的单科分数的次序要求排出考生录取的次序。 2.基本要求 (1)假设待排序的记录数不超过10000,表中记录的关键字数不超过5,各个关键字的范围均为0至100。按用户给定的进行排序的关键字的优先关系,输出排序结果。 (2)约定按LSD法进行多关键字的排序。在对各个关键字进行排序时采用两种策略:其一是利用稳定的内部排序法,其二是利用"分配"和"收集"的方法。并综合比较这两种策略。 (3)测试数据由随机数生成器产生。 3.流程图

三.详细设计 本程序是对语文,数学,英语,体育,综合这5门成绩按照此顺序进行优先排序。各科分数为0~100。 由于本实验约定按LSD进行多关键字的排序。在对个关键字进行排序时采用两种策略:其一是利用稳定的内部排序法,其二是利用“分配”和“收集”的方法。所以在一个程序里实现了这两种排序方法。 第一种排序方法由于要使用稳定的排序方法,故参考书上的几种排序方法后,选用了冒泡排序和静态链表存储方式,每一趟排序后,找出最高分。第二种排序方法利用“分配”与“收集”的基数排序算法,用静态链表存储分数,在一趟排序中,将结点分配到相应的链

数据结构课程设计_排序算法比较【完整版】

课程设计报告 数据结构课程设计题目:各种排序 学生姓名:高扬 专业:网络工程 班级:10211302 学号:1021130221 指导教师:姜林王志波 2012年6 月27 日

目录 排序算法比较 一、程序要求分析 二、程序主要功能 三、程序运行平台 四、程序数据结构 五、算法及时间复杂度 六、程序源代码 七、自我总结

各种排序 一、需求分析 任务:用程序实现插入法排序、起泡法、选择法、快速法、合并法排序; 输入的数据形式为任何一个正整数,大小不限。 输出的形式:数字大小逐个递增的数列。 要求给出多组不同元素个数的输入数据,并用列表打印出每种排序下的各趟排序结果。每个排序法结束时应打印出其元素比较的次数和交换的次数。此程序需将结果用列表打印,一定要将其打印结果排列好。 二、程序的主要功能 1.用户输入任意个数,产生相应数量的随机数 2.用户可以自己选择排序方式(直接插入排序,冒泡排序、快速排序、选择排序、二路归并排序五种排序方法)的一种 3.程序给出原始数据、排序后从小到大的数据,并给出排序所用的时间,比较的总次数和交换的总次数。 三、程序运行平台 Visual C++ 6.0版本 四、数据结构 1.类: NuovSort{ public: void Myface(); void choose(); void insertsort(int R[],int n); //直接插入排序法 void Bubblesort(int R[],int n); //冒泡排序算法实现 void quicksort(int R[],int left,int right); //快速排序算法实现 void selectsort(int R[],int n); //直接选择排序算法实现

数据结构课程设计 多关键字排序 高考排序

淮 海 工 学 院 计算机工程学院
课程设计报告
设计名称: 选题名称: 姓 名: 专业班级: 系 (院): 设计时间: 设计地点:
数据结构课程设计 多关键字排序
周宣 学 号: 110821120 网络工程 081
计算机工程学院 2009.12.28~2010.1.12 软件工程实验室、教室
指导教师评语:
成绩:
签名:
年月日

数据结构课程设计报告
第 1 页,共 页
1.课程设计目的
1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序 求解指定问题。
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水 平,并在此过程中培养他们严谨的科学态度和良好的工作作风。
2.课程设计任务与要求:
任务
题目:多关键字的排序
【问题描述】 多关键字的排序有其一定的实用范围。例如:在进行高考分数处理时,除了需对总分进行排序外, 不同的专业对单科分数的要求不同,因此尚需在总分相同的情况下,按用户提出的单科分数的次序要求 排出考生录取的次序。 【基本要求】 (1)假设待排序的记录不超过 10000,表中记录的关键字数不超过 5,各个学科关键字的范围均为 0 至 100,总分关键字的范围是 0-300。按用户给定的进行排序的关键字的优先关系,输出排序结果。 (2)约定按 LSD 法进行多关键字的排序。在对各个关键字进行排序时采用两种策略:其一是利用 稳定的内部排序法,其二是利用“分配”和“收集”的方法。并综合比较这两种策略。 【测试数据】 由随机数产生器生成。 【实现提示】 由于是按 LSD 方法进行排序,则对每个关键字均可进行整个序列的排序,但在利用通常的内部排序 方法进行排序时,必须选用稳定的排序方法 要求: 1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计 实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准 备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加 大代码的重用率。 2、.设计的题目要求达到一定工作量(300 行以上代码),并具有一定的深度和难度。 3、程序设计语言推荐使用 C/C++,程序书写规范,源程序需加必要的注释; 4、每位同学需提交可独立运行的程序; 5 、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于 10 页(代码不算);
6、课程设计实践作为培养学生动手能力的一种手段,单独考核。

内部排序算法比较课程设计报告种基本排序

合肥学院 计算机科学与技术系 课程设计报告 2017?2018 学年第一学期 课程课程设计名称学生姓名学号数据结构与算法内部排序算法比较 操彦1504012027

指导教师 2017 年9 月

1、问题分析和任务定义 各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间,存在一定的却缺陷。我们将通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。所设计的程序应能够将产生的随机数据同时用不同的内部排序算法排序,并列出关键字比较次数与移动次数,方便比较。待排序表的表长不少于100,为方便起见, 我们令表长等于100,用5组随机的数据排序的结果作比较。 2、数据结构的选择和概要设计 一.可能排序表的抽象数据类型定义: ADT OrderableList { 数据对象:D=個€ IntegerSet , i=1 , 2, ........... , n, n>0} 数据关系:R1= { 已:| 丘:—L,机| € D,i=2, n} 基本操作: Ini tList (n) 操作结果:构造一个长度为n,元素值依次为1, 2, ....... , n的有序表。 Ran domizeList(d,is In verseOrder) 操作结果:首先根据islnverseOrder 为True或False,将表置为逆序或正序,然后将表进 行d (0< d< 8)级随机打乱。d为0时表不打乱,d越大,打乱程度越高。 RecallList () 操作结果:恢复最后一次用Ran domizeList随机大乱的可排序表。 ListLe ngth () 操作结果:返回可排序的长度。 ListEmpty () 操作结果:若可排序表为空表,则返回True,否则返回False。 BubbleSort (&c, &s) 操作结果:进行冒泡排序,返回关键字比较次数c和移动次数s。 InsertSort (&c, &s) 操作结果:进行插入排序,返回关键字比较次数c和移动次数S。

相关文档
最新文档