河北工业大学-数据结构实验报告-内部排序算法效率比较平台的设计与实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五内部排序算法效率比较平台的设计与实现

1.试验内容

1、问题描述

各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。设计和实现内部排序算法效率比较平台,通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观的感受。

2、基本要求

(1)对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。

(2)待排序的表长不小于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。

(3)最后要对结果作出简单分析,包括对各组数据得出结果波动大小的解释。

3、测试数据

由随机数产生器生成。

4、实现提示

主要工作是设法在已知算法中的适当位置插入对关键字的比较次数和移动次数的计数操作。程序还可以考虑几组数据的典型性,如,正序、逆序和不同程度的乱序。注意采用分块调试的方法。

2.试验目的

掌握多种排序方法的基本思想,如直接插入、冒泡、简单选择、快速、堆、希尔排序等排序方法,并能够用高级语言实现。

3.流程图

4.源程序代码

#include

#include

#include

#define le 100

struct point

{

char key[11];

};

//冒泡法

void maopao(point c[])

{

point a,b[le];

int i,j,jh=0,bj=0,q;

for(i=0;i

b[i]=c[i];

};

for(i=0;i

for(j=le-1;j>i;j--){

bj=bj+1;q=strcmp(b[i].key,b[j].key);

if(q==1){

a=b[i];

b[i]=b[j];

b[j]=a;

jh=jh+3;

};

};

};

cout<<"冒泡法:"<

for(i=0;i

cout<

};

cout<

};

//直接插入排序

void zhijiecharu(point c[])

{

point b[le+1];

int i,j,jh=0,bj=0,q;

for(i=0;i

b[i+1]=c[i];

};

for(i=2;i<=le+1;i++){

q=strcmp(b[i].key,b[i-1].key);

bj=bj+1;

if(q==-1){

b[0]=b[i];

b[i]=b[i-1];jh=jh+2;

q=strcmp(b[0].key,b[i-2].key);bj=bj+1;

for(j=i-2;q==-1;j--){

b[j+1]=b[j];jh=jh+1;

q=strcmp(b[0].key,b[j-1].key);bj=bj+1;

};

b[j+1]=b[0];jh=jh+1;

};

};

cout<<"直接插入排序:"<

for(i=1;i

cout<

};

cout<

};

//

void shellinsert(point c[],int dk,int d[])

{

int j,i,q;

point a;

for(i=dk+1;i

q=strcmp(c[i].key,c[i-dk].key);d[0]=d[0]+1;

if(q==-1){

a=c[i];q=strcmp(a.key,c[i-dk].key);d[0]=d[0]+1;d[1]=d[1]+1;

for(j=i-dk;j>0&&q==-1;j=j-dk){

c[j+dk]=c[j];d[1]=d[1]+1;

q=strcmp(a.key,c[j-dk].key);

};

c[j+dk]=a;d[1]=d[1]+1;

};

};

};

void shellsort(point c[],int dlta[],int t)

{

int k,d[2],i;d[0]=0;d[1]=0;

point b[le+1];

for(k=0;k

b[k+1]=c[k];

};

for(k=0;k

相关文档
最新文档