排序算法1.ppt
《排序算法1.ppt》由会员分享,可在线阅读,更多相关《排序算法1.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、排序算法及应用排序算法及应用为什么要学排序数据获取后通常需要进行处理,处理后的数据其目的是便于人们的应用。数据处理方法有多种,通常有数据的排序,查找,插入,删除,归并等操作。排序就显得极为重要。本章重点介绍数据排序的几种方法。什么是排序?什么是排序?排序是处理数据过程中一种很常用的运算,是将一组原本无序的数据元素,通过一定的方法,按照某个域的值(关键字)递增或递减的次序重新排列的过程。排序的目的之一是为了方便查找:对无序数据进行查找的时间复杂度为O(n);在排序的基础上进行查找,其时间复杂度为O(logn)。排序的分类:排序的分类:根据排序过程中是否使用外存储器,可以把排序分为外排序和内排序。
2、下面主要讨论几种常见的内排序算法:选择排序、冒泡排序、插入排序、快速排序和堆排序。什么是稳定性?当待排序的数值或记录的关键字均不相同时,排序结果是惟一的,否则排序结果不唯一。如果序列中关键字相同的多个记录经过某种排序方法进行排序之后,仍能保持它们在排序之前的相对次序,则称这种排序方法是稳定的;否则,称这种排序方法是不稳定的。例如:有一组记录的关键字为(23,85,72,58,23,40),其中关键字同为23的记录有两个(为了区分,后一个23带有下划线),如果一种排序算法使排序后的结果是(23,23,40,58,72,85),则此方法是稳定的;如果另一种排序算法使排序后的结果是(23,23,40
3、,58,72,85),则此方法是不稳定的,1.选择排序选择排序是一种简单的排序方法。其基本思想是:把待排序的n个元素看作一个有序部分和一个无序部分。开始时有序部分为空,无序部分包含n个元素。排序时每次从无序部分中选出最小的元素,把它与无序部分的第一个元素交换位置,那么该元素必大于(或等于)有序部分中的所有元素,从而使有序部分元素个数增1,无序部分元素个数减1。经过n-1次选择和交换后,有序部分有n-1个元素,无序部分只有1个元素,且该元素大于(或等于)有序部分中的所有元素,整个排序过程结束。初始关键字:2252204119024218542231第一趟排序后:41220225190242185
4、42231第二趟排序后:4142225190242185220231第三趟排序后:4142185190242225220231第四趟排序后:4142185190242225220231第五趟排序后:4142185190220225242231第六趟排序后:4142185190220225242231第七趟排序后:4142185190220225231242排序过程演示programselectsort;constmx=10000;vard:array1.mxoflongint;n,i,j,k,t:longint;beginreadln(n);fori:=1tondoread(di);fori:
5、=1ton-1dobegink:=i;forj:=i+1tondo/dk为di.dn的最小元素ifdjdkthenk:=j;t:=dk;dk:=di;di:=t;/交换end;fori:=1tondowriteln(di);end.可见,选择排序的时间复杂度为O(n2)的,需要进行n*(n-1)/2次比较和n-1次交换。优化:分析上面的排序过程可以发现,如果di是di.dn中的最小值,即k=i,那么不需要交换dk和di。programselectpro;constmx=10000;vard:array1.mxoflongint;n,i,j,k:longint;beginreadln(n);fo
6、ri:=1tondoread(di);fori:=1ton-1dobegink:=i;forj:=i+1tondo/dk为di.dn的最小元素ifdjdkthenk:=j;ifkithen/交换beginj:=dk;dk:=di;di:=j;end;end;fori:=1tondowriteln(di);end.可见,选择排序至多需要n-1次交换。2.冒泡排序冒泡排序也是一种简单的排序方法。其基本思想是:通过相邻元素相邻元素之间的比较和交换使较小的元素逐渐从后向前移动,就像水底的气泡一样逐渐向上冒。具体过程如下:首先比较dn和dn-1,若dndn-1,则交换,使较小的元素前移,较大的元素后移;
7、接着比较dn-1和dn-2,以此类推,直到比较d2和d1并使较小的元素前移,第一趟排序结束,则d1为最小的元素。然后在d2.dn间进行第二趟排序,使第二小元素前移到d2位置;n-1趟排序后,整个冒泡排序结束。初始关键字:2252204119024218542231不交换d8和d7:2252204119024218542231交换d7和d6:2252204119024242185231交换d6和d5:2252204119042242185231交换d5和d4:2252204142190242185231不交换d4和d3:2252204142190242185231交换d3和d2:22541220
8、42190242185231交换d2和d1:4122522042190242185231排序过程演示第一趟排序后:4122522042190242185231第二趟排序后:4142225220185190242231第三趟排序后:4142185225220190231242第四趟排序后:4142185190225220231242第五趟排序后:4142185190220225231242第六趟排序后:4142185190220225231242第七趟排序后:4142185190220225231242programmaopaosort;constmx=10000;vard:array1.mxo
9、flongint;n,i,j,k:longint;beginreadln(n);fori:=1tondoread(di);fori:=1ton-1doforj:=n-1downtoidoifdj+1djthenbegin/相邻元素交换k:=dj;dj:=dj+1;dj+1:=k;end;fori:=1tondowriteln(di);end.可见,其时间复杂度也是O(n2)的。不难发现,如果某趟排序中没有发生交换,就意味着任意两个相邻元素都是有序的,那么全部元素就已经有序了。所以该算法可以改进如下:programmaopao1;constmx=10000;vard:array1.mxoflon
10、gint;n,i,j,k:longint;sorted:boolean;/是否有序beginreadln(n);fori:=1tondoread(di);sorted:=false;i:=1;whilenotsorteddobeginsorted:=true;/假定已有序forj:=n-1downtoidoifdj+10)and(djk)dobegindj+1:=dj;j:=j-1;end;dj+1:=k;end;fori:=1tondowriteln(di);end.可见,其时间复杂度为O(n2),需要至多n*(n-1)/2次、至少n-1次比较,至多n*(n-1)/2次、至少0次的移动。可以
11、通过折折半查找半查找的方法来确定新元素在有序部分中的位置,以提高效率。4.桶排序桶排序 桶排序的思想是若待排序的记录的关键字在一个明显有限范围内(整型)时,可设计有限个有序桶,每个桶装入一个值(当然也可以装入若干个值),顺序输出各桶的值,将得到有序的序列。例:输入n个0到100之间的不相同整数,由小到大排序输出。program ex_1;var b:array0.100 of integer;k:0.100;i:integer;Begin readln(n);write(Enter date:(0-100);for i:=0 to 100 do bi:=0;/初始化 for i:=1 to n
12、 do begin read(k);bk:=bk+1;/将关键字等于k的值全部装入第k桶中 end;writeln(Output data:);for i:=0 to 100 do while bi0 do begin write(i:6);bi:=bi-1 end;/输出排序结果 writeln;end.5.快速排序快速排序是一种基于分治策略的排序方法。其基本思想是:首先从待排序区间(初始时为1.n)中选取一个元素(方便起见,一般是选取区间内的第一个元素)作为基准元素,然后从两端向中间依次进行比较和交换,把位于基准元素之前且比基准元素大的交换到后面,把位于基准元素之后且比基准元素小的交换到前
13、面,直至基准元素位于前后两部分的交界处。这样前面部分的所有元素都小于等于基准元素,后面部分的所有元素均大于等于基准元素,基准元素的所在位置就是排序后的最终位置。然后再对基准元素的前后两个区间分别进行快速排序,直至每个区间为空或只包含一个元素,整个快速排序结束。排序过程演示初始关键字:2252204119024218542231(1.8)225(6)4222041190185(1.5)242231(7.8)231(7)242(8)41(1)42(2)220190185(3.5)185190(3.4)220(5)185(3)190(4)取首快排programquicksort1;constmx=1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 排序 算法
限制150内