各种排序算法时间性能的比较讲解.docx

上传人:b****2 文档编号:513384 上传时间:2023-04-29 格式:DOCX 页数:16 大小:182.15KB
下载 相关 举报
各种排序算法时间性能的比较讲解.docx_第1页
第1页 / 共16页
各种排序算法时间性能的比较讲解.docx_第2页
第2页 / 共16页
各种排序算法时间性能的比较讲解.docx_第3页
第3页 / 共16页
各种排序算法时间性能的比较讲解.docx_第4页
第4页 / 共16页
各种排序算法时间性能的比较讲解.docx_第5页
第5页 / 共16页
各种排序算法时间性能的比较讲解.docx_第6页
第6页 / 共16页
各种排序算法时间性能的比较讲解.docx_第7页
第7页 / 共16页
各种排序算法时间性能的比较讲解.docx_第8页
第8页 / 共16页
各种排序算法时间性能的比较讲解.docx_第9页
第9页 / 共16页
各种排序算法时间性能的比较讲解.docx_第10页
第10页 / 共16页
各种排序算法时间性能的比较讲解.docx_第11页
第11页 / 共16页
各种排序算法时间性能的比较讲解.docx_第12页
第12页 / 共16页
各种排序算法时间性能的比较讲解.docx_第13页
第13页 / 共16页
各种排序算法时间性能的比较讲解.docx_第14页
第14页 / 共16页
各种排序算法时间性能的比较讲解.docx_第15页
第15页 / 共16页
各种排序算法时间性能的比较讲解.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

各种排序算法时间性能的比较讲解.docx

《各种排序算法时间性能的比较讲解.docx》由会员分享,可在线阅读,更多相关《各种排序算法时间性能的比较讲解.docx(16页珍藏版)》请在冰点文库上搜索。

各种排序算法时间性能的比较讲解.docx

各种排序算法时间性能的比较讲解

实训报告

实训题目:

各种排序算法时间性能的比较

 

学院:

计算机科学与技术学院

专业:

软件工程

班级:

142

学号:

1400170269

学生姓名:

莫磊

指导教师:

蔡丽

 

2016年3月15日

 

一、实训目的及要求

数据结构是计算机课程的一门重要的基础课,它的教学要求大致有三个重要方面:

其一就是让学生学会分析研究计算机加工的数据对象的特性,以便为数据选择适当的物理结构和逻辑结构;其二,根据结构,选择适当的算法,并初步掌握算法的时间分析和空间分析;其三,学习复杂的程序设计。

本综合实训利用VisualStudio2008集成编程环境为实践工具,通过上机实践培养学生分析具体问题、解决实际问题的能力,训练和培养学生的数据抽象能力和程序设计的能力。

数据结构是一门实践性较强的课程,以培养学生的数据抽象能力和程序设计的能力为目的。

在实训时应注重培养学生的实际操作能力。

本综合实训安排了18学时的实验课时,具体要求如下:

1.学习和理解每个实训题目的基本理论和方法;

2.掌握每个实验的实现步骤和关键技术;

3.准备好实验所需要的资源和文档;

4.上机实现程序,得到通过调试的正确程序。

5.根据每个实验的不同要求,完成实验报告的word文档。

2、实训环境

WindowsXP

VisualStudio2013

三、实训内容

(1)设计并实现上述各种排序算法;

(2)产生正序和逆序的初始排列分别调用上述排序算法,并比较时间性能;

(3)产生随机的初始排列分别调用上述排序算法,并比较时间性能。

(4)对各种排序方法(直接插入排序、希尔排序、起泡排序、直接选择排序)的时间性能进行比较。

四、算法描述及实训步骤

上述各种排序方法都是基于比较的内排序,其时间主要消耗在排序过程中进行的记录的比较次数和移动次数,因此,统计在相同数据状态下不同排序算法的比较次数和移动次数,即可实现比较各种排序算法的目的。

五、总结及心得体会

直接选择排序算法是对冒泡排序的改进,这种方法是在参加排序数组中找出最小(或最大)的数据元素,使它与第一个元素中的数据相互交换位置然后再在余下的元素中找出最小(或最大)的数据元素与第二个元素中的元素交换位置,以此类推直到所有元素成为有序序列。

六、实训结果

七、源代码:

#include

#include

#include

//正序希尔排序

voidxiEr(intnum[],intn,int&no,int&r){

intitem;

inti,j,d;

for(d=n/2;d>=1;d=d/2){

for(i=d;i

item=num[i];

j=i-d;

while((j>=0)&&(item

num[j+d]=num[j];

j=j-d;

r=r+1;

}

num[j+d]=item;

no=no+1;

}

}

//printf("\n");

//for(intx=0;x

//printf("%d\t",num[x]);

//}

}

//逆序希尔排序

voidxiErUp(intnum[],intn,int&no,int&r){

intitem;

inti,j,d;

for(d=n/2;d>=1;d=d/2){

for(i=d;i

item=num[i];

j=i-d;

while((j>=0)&&(item>num[j])){

num[j+d]=num[j];

j=j-d;

r=r+1;

}

num[j+d]=item;

no=no+1;

}

}

}

//正序冒泡排序

voidMaoPao(intnum[],intn,int&no,int&r){

boolflag;

inttest;

for(inti=1;i

flag=true;

for(intj=n-1;j>=i;j--){

if(num[j]

test=num[j];

num[j]=num[j-1];

num[j-1]=test;

flag=false;

r++;

}

no++;

}

if(flag){

return;

}

}

}

voidMaoPaoUp(intnum[],intn,int&no,int&r){

boolflag;

inttest;

for(inti=1;i

flag=true;

for(intj=n-1;j>=i;j--){

if(num[j]>num[j-1]){

test=num[j];

num[j]=num[j-1];

num[j-1]=test;

flag=false;

r++;

}

no++;

}

if(flag){

return;

}

}

}

voidChaRu(intnum[],intn,int&no,int&r)//直接插入排序

{

//:

比较次数,r:

移动次数。

inti,j,x;

for(i=1;i

{

no++;

x=num[i];

j=i-1;

while((j>=0)&&(x

{

r++;

num[j+1]=num[j];

j--;

}//顺序比较和移动

num[j+1]=x;

}

}

voidChaRuUp(intnum[],intn,int&no,int&r)//直接插入排序

{

//:

比较次数,r:

移动次数。

inti,j,x;

for(i=1;i

{

no++;

x=num[i];

j=i-1;

while((j>=0)&&(x>num[j]))

{

r++;

num[j+1]=num[j];

j--;

}//顺序比较和移动

num[j+1]=x;

}

}

voidXuanZe(intnum[],intn,int&no,int&r)//直接选择排序/:

比较次数,r:

移动次数

{

intx;inti,j,k;

for(i=1;i<=n-1;i++)

{

k=i-1;

for(j=i;j<=n-1;j++)

{

no++;if(num[j]

}

if(k!

=i-1)

{

r++;

x=num[i-1];

num[i-1]=num[k];

num[k]=x;

}

}

}

voidXuanZeUp(intnum[],intn,int&no,int&r)//直接选择排序/:

比较次数,r:

移动次数

{

intx;inti,j,k;

for(i=1;i<=n-1;i++)

{

k=i-1;

for(j=i;j<=n-1;j++)

{

no++;if(num[j]>num[k])k=j;

}

if(k!

=i-1)

{

r++;

x=num[i-1];

num[i-1]=num[k];

num[k]=x;

}

}

}

voidShuChu(intnum[],intn,intno,intr,charname[]){

printf("===============输出%s排序后数据如下==============\n\n",name);

for(intx=0;x

printf("%d\t",num[x]);

}

printf("\n比较的次数为:

%d\t移动的次数为:

%d",no,r);

printf("\n===========================================================\n\n");

}

intmain(){

intnum[100];

intn=100;

intno1,no2,no3,no4;

intr1,r2,r3,r4;

intno11,no22,no33,no44;

intr11,r22,r33,r44;

charname1[]="希尔正序";

charname11[]="希尔逆序";

charname2[]="冒泡正序";

charname22[]="冒泡逆序";

charname3[]="直接插入正序";

charname33[]="直接插入逆序";

charname4[]="直接选择正序";

charname44[]="直接选择逆序";

intitem1[100];

intitem2[100];

intitem3[100];

intitem4[100];

intitem22[100];

intitem33[100];

intitem44[100];

no4=no3=no2=no1=0;

r4=r3=r2=r1=0;

no44=no33=no22=no11=0;

r44=r33=r22=r11=0;

printf("============初始的随机数据如下===========\n\n");

for(inti=0;i

num[i]=rand()%100;

printf("%d\t",num[i]);

}

for(intx=0;x

item1[x]=num[x];

item2[x]=num[x];

item3[x]=num[x];

item4[x]=num[x];

item22[x]=num[x];

item33[x]=num[x];

item44[x]=num[x];

}

xiEr(num,n,no1,r1);

ShuChu(num,n,no1,r1,name1);

xiEr(item1,n,no11,r11);

ShuChu(item1,n,no11,r11,name11);

MaoPao(item2,n,no2,r2);

ShuChu(item2,n,no2,r2,name2);

MaoPaoUp(item22,n,no22,r22);

ShuChu(item22,n,no22,r22,name22);

ChaRu(item3,n,no3,r3);

ShuChu(item3,n,no3,r3,name3);

ChaRuUp(item33,n,no33,r33);

ShuChu(item33,n,no33,r33,name33);

XuanZe(item4,n,no4,r4);

ShuChu(item4,n,no4,r4,name4);

XuanZeUp(item44,n,no44,r44);

ShuChu(item44,n,no44,r44,name44);

printf("===========================================================\n");

printf("===========================================================\n");

printf("所有排序的比较次数和移动次数如下:

\n\n");

printf("%s:

\t比较次数为:

%d移动次数为:

%d\n",name1,no1,r1);

printf("%s:

\t比较次数为:

%d移动次数为:

%d\n",name1,no11,r11);

printf("%s:

\t比较次数为:

%d移动次数为:

%d\n",name2,no2,r2);

printf("%s:

\t比较次数为:

%d移动次数为:

%d\n",name22,no22,r22);

printf("%s:

\t比较次数为:

%d移动次数为:

%d\n",name3,no3,r3);

printf("%s:

\t比较次数为:

%d移动次数为:

%d\n",name33,no33,r33);

printf("%s:

\t比较次数为:

%d移动次数为:

%d\n",name4,no4,r4);

printf("%s:

\t比较次数为:

%d移动次数为:

%d\n",name44,no44,r44);

printf("\n===========================================================\n");

getchar();

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2