常用排序算法分析比较.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

?

?

常用排序算法分析比较

?

?

论文导读:还要掌握解题的算法。应用冒泡排序法时。所以快速排序法属于不稳定性排序。利用直接插入排序法。直接选择排序法。

关键词:算法,冒泡排序法,快速排序法,归并排序法,插入排序法,选择排序法

?

引言

我们在进行程序设计时,除了要掌握一门程序设计语言外,还要掌握解题的算法。算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。一切问题解决的过程都是有效数据组织的过程,是寻找、设计和实现算法的过程。排序是数据处理中的一项重要操作。要编制一个好的数据排序程序,就要有一个好的排序算法,既运算快又内存开销小。而所谓排序是将一组无序的数据按一定规律进行排列,使其成为有序序列。排序方法很多,应用也很广泛。这里介绍几个常用的排序算法,并对此进行分析和比较。

1.冒泡排序法

冒泡排序法是一个最简单的交换排序方法,它是利用相邻的两数据相互比较,如果前面数据比后面数据小,则将这两个数据交换位置(大气泡在小气泡上面),然后再以同样方法比较下两个相邻的数据,以此类推,直到所有数据都有序为止。其算法如下:

voidbubblesort(pxa[],intn)

{

intI,j,bjh;

pxtmp;

for(I=0;In-1;I++)

{bjh=0;

for(j=n-1;jI;j--)

if(a[j]a[j-1])

{tmp=a[j];

a[j]=a[j-1];

a[j-1]=tmp;

bjh=1;

}

if(bjh==0)

return;

}

}

应用冒泡排序法时,若数据已有部分排好序,则它可以很快速地完成排序,这也是它的优点;但另一方面,它会反复扫描数据,比较相邻的两个数据,速度不快也没有效率,这是它不足的地方。从上述算法中也可以看出,相同的数值在排序过后其顺序和排序前的顺序是一样的,冒泡排序是属于稳定性排序。

2.快速排序法

快速排序法也是很有名且最常用的排序方法之一。也属于交换排序的方法。它的基本思想是通常取待排序的第一个记录,把该记录放入最终位置后,整个数据区间被此记录分割成两个子区间。所有关键字比该记录关键字小的放置在前子区间中,所有比它大的放置在后子区间中,并把该记录排在这两个子区间的中间,这个过程也称作一趟快速排序。这之后对所有的两个子区间分别重复上述过程,直到每个子区间内只有一个记录为止。论文检测。快速排序算法如下:

voidquicksort(pxa[],ints,intt)

{

intI=s,j=t;

pxtmp;

if(st)

{tmp=a[s];

while(I!=j)

{while(jI)

j--;

if(Ij)

{a[I]=a[j];

I++;

}

while(Ij)

I++;

If(Ij)

{a[j]=a[I];

j--;

}

}

a[I]=tmp;

Quicksort(a,s,I-1);

Quicksort(a,I+1,t);

}

}

快速排序在进行每次分割时,如果两个子表均匀大小时,它的效率是最快的;反之,如果分割的两个子表大小相差很大时,它的效率是最慢的。而且快速排序在交换数据的过程中,相同数据的位置会发生变动,所以快速排序法属于不稳定性排序。

3.归并排序

归并排序也是一个常用的排序方法。归并是将两个或多个有序记录序列合并成一个有序序列。归并排序就是用归并的办法进行排序,把多个有序表经过若干次归并,最终合成一个有序表。

归并排序算法如下:

voidMergesort(pxa[],intlow,intmid,inthigh)

{

px*a1;

intI=low,j=mid+1,k=0;

R1=(px*)nalloc((high-low+1)*sizelf(px));

While(I=midj=high)

If(a[I].key=a[j].key)

{a1[k]=a[I];

I++;k++;

}

else

{a1[k]=a[j];

j++;k++;

}

while(I=mid)

{

a1[k]=a[k];

I++;k++;

}

while(j=high)

a1[k]=a[j];

J++;k++;

}

for(k=0,I=low;I=high;k++,I++)

a[I]=a1[k];

}

对于归并算法,当有n个元素时,需要[log2n]趟归并,每一趟归并,其关键字比较次数不超过n-1,元素移动次数都是n,而在归并排序过程中,数据元素的相对位置不发生改变,所以归并排序算法是稳定的。

4.插入排序

常用的插入排序算法是直接插入排序,是把一个记录插入到已排序的有序文件中去,使得在插入这个记录之后,得到的仍然是有序文件。论文检测。它的基本思想是:每一趟将一个待排序的记录,按其关键字值的大小插入到已经排序的部

文档评论(0)

159****8201 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档