排序算法性能分析Word格式文档下载.docx

上传人:b****6 文档编号:21356545 上传时间:2023-01-29 格式:DOCX 页数:15 大小:84.39KB
下载 相关 举报
排序算法性能分析Word格式文档下载.docx_第1页
第1页 / 共15页
排序算法性能分析Word格式文档下载.docx_第2页
第2页 / 共15页
排序算法性能分析Word格式文档下载.docx_第3页
第3页 / 共15页
排序算法性能分析Word格式文档下载.docx_第4页
第4页 / 共15页
排序算法性能分析Word格式文档下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

排序算法性能分析Word格式文档下载.docx

《排序算法性能分析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《排序算法性能分析Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。

排序算法性能分析Word格式文档下载.docx

排序是计算机程序设计中的一种重要操作。

各种部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。

关键字:

排序,性能分析。

前言

排序是计算机程序设计中的一种重要操作。

它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。

内部排序的方法很多,但是就其全面性能而言,很难提出一种被认为是最好的方法,每一种方法都有各自的优缺点,适合在不同的环境下使用。

如果按排序过程中依据的不同原则对内部排序方法进行分类,则大致可分为插入排序,交换排序,选择排序,归并排序和记数排序等五类。

这几种排序算法是在顺序存储结构上实现的,因此在排序过程中需要进行大量记录的移动。

当记录很大时,时间耗费很大,此时可采用静态链表作存储结构。

但是有的排序方法,无法实现表排序。

在这种情况下可以进行地址排序,即另设一个地址向量指示相应记录。

正文

1.采用类c语言定义相关的数据类型

int整型,char字符型,

2.各模块的伪码算法

(1)插入排序伪码算法:

voidInsertSort(Splist&

L){

for(i=2;

i<

=L.length;

++i)

if(LT(L.r[i].key,L.r[i-1].key))  //“《”,须将L.r[i]插入有序子表

{L.r[0]=L.r[i];

         //复制为哨兵

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

For(j)i-2;

LT(L.r[0].key,L.r[j].key);

--j)

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

         //记录后移

L.r[j+1]=L.r[0];

//插入到正确位置

}

}//InsertSort

(2)希尔排序

voidshllInsert(Splist&

L,intdk){

for(i=dk+1;

if(LT(L.r[i].key,L.r[i-dk].key)) {

L.r[0]=L.r[i];

           //暂存

for(j=i-dk;

j>

0&

&

LT(L.r0].key,L.r[j].key);

j-=dk)

L.r[j+dk]=L.r[j];

       //记录后移

L.r[j+dk]=L.r[0];

}//插入

}//shellsort

voidshllsort(Splist&

L,intdata[],intt){

for(k=0;

k<

t;

++k)

shllInsert(L,data[k]);

(3)快速排序

intpart(sqlist&

L,intlow,inthigh){

//交换顺序表L中子表L。

R[low..high]的记录,使枢轴记录到位,并返回其所在位

 // 此时在它之前(后)的记录均不大(小)于它。

pivotkey=L.[Low].key;

while(loe<

high){

While(low<

high&

l.r[high].key>

=pivotkey)--high;

L.r[lowL.r[high];

while(low<

l.r[low].key>

=pivotkey)++low;

L.r[lowL.r[high];

returnlow

}//partition

(4)选择排序

voidselectsort(splist&

L){

for(i=1;

L.length;

++i){

j=selectMinKey(L,i);

if(i!

=j)L.r[i]L.r[j];

}//selectsort

(5)其泡排序

voidbubblesort(sqlistr,intn){

intI,j,w;

for(i=1;

=n-1;

i++)

for(j=n;

=i+1;

j--)

if(r[j].key<

r[j-1].key)//比较

{    

W=r[j];

R[j]=r[j-1];

R[j-1]=w;

3.函数的调用关系图

Main

Insertionsortquicksortbubblesortselectionsortshellsort

Outputquick

4.调试分析

a、调试中遇到的问题及对问题的解决方法

刚开始进行输入时,对有些排序不能实现,我就对不能实现的排序进行分析,对产生的语法错误进行了及时的改正,以至所有的排序算法能够顺利的实现。

b、算法的时间复杂度和空间复杂度

算法的时间复杂度分别是O(n2),

O(nlog2n),O(log2n),

测试结果:

234561381

321245394637100200

5.源程序

#include<

stdio.h>

string.h>

#defineN100//定义数组最大为100

constintt=3;

//定义希尔排序次数

intd[3]={4,3,1};

//定义希尔排序比较量

intqmt;

//快速排序的移动次数

intqct;

//快速排序的比较次数

voidoutput(intn,inta[],intct,intmt)//内部排序中调用的输出函数

{

inti;

printf("

\n排序结果:

"

);

for(i=0;

n;

%d"

a[i]);

//输出各排序完成的数组

\n比较次数:

%d\n"

ct);

//输出各排序比较次数

移动次数:

%d\n\n"

mt);

//输出各排序移动次数

}

voidbubble_sort(intn,intA[])//冒泡排序

intmt=0;

//移动次数mt=movetime

intct=0;

//比较次数ct=cmdtime

inti,j,temp;

inta[N];

for(i=0;

a[i]=A[i];

//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)

n-1;

{

for(j=0;

j<

n-1-i;

j++,ct++)

if(a[j+1]<

a[j])//前后比较

temp=a[j],

a[j]=a[j+1],

a[j+1]=temp,

mt+=3;

//关键字交换计为3次移动

}

}

冒泡排序"

output(n,a,ct,mt);

voidselection_sort(intn,intA[])//选择排序

//移动次数movetime

//比较次数cmdtime

inti,j,temp,k;

k=i;

for(j=i+1;

if(a[k]>

a[j])

k=j;

temp=a[i],

a[i]=a[k],

a[k]=temp,

//关键字交换计为3次移动

选择排序"

voidquick(inta[],intlow,intup)//快速排序递归算法

if(low<

up)

i=low;

j=up;

temp=a[low],

qmt++;

while(i!

=j)

qct++;

while(i<

j&

a[j]>

temp)

j--,

if(i<

j)

a[i++]=a[j],

a[i]<

=temp)

i++,

a[j--]=a[i],

qct++,

a[i]=temp,

quick(a,low,j-1);

quick(a,i+1,up);

voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成)

quick(a,0,n-1);

//调用快速排序递归算法

快速排序"

output(n,a,qct,qmt);

voidinsertion_sort(intn,intA[])//插入排序

for(i=1;

mt++;

for(j=i-1;

=0&

temp<

a[j];

j--,ct++)

a[j+1]=a[j],

插入排序"

voidshell_sort(intn,intA[])//希尔排序

inti,j,k,h,y;

h=d[i];

for(j=h;

j++)

y=a[j],

for(k=j-h,ct++,mt++;

k>

y<

a[k];

k-=h)

a[k+h]=a[k];

a[k+h]=y;

希尔排序"

voidmain()

intn;

intA[N];

请输入数组大小(小于100):

scanf("

%d"

&

n);

//输入所需排序数组大小

请输入数组a[%d]:

i);

A[i]);

//依次输入数组A[0]~A[n]

bubble_sort(n,A);

//冒泡排序

insertion_sort(n,A);

//插入排序

selection_sort(n,A);

//选择排序

quick_sort(n,A);

//快速排序

shell_sort(n,A);

//希尔排序

总结

在这三周的数据结构课程设计中,我的题目是:

排序算法性能分析,这三周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。

一个人要完成所有的工作是非常困难和耗时的。

在以后的学习中我会更加注意各个方面的能力的协调发展。

在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。

三周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,三周中我收益很大,学到很多。

参考文献

1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。

2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。

3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。

4.谭浩强,《C语言程序设计》,清华大版社学出。

致谢

首先感谢我的指导老师卢鹏丽老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。

感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。

我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。

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

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1