- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
排序一冒泡选择快速
排序一:冒泡排序、选择排序、快速排序
厦门六中肖海
排序(sort)是很常见的操作,是编程的基本功。排序就是将数据按一定的顺序重新排列,排序的基础是不断的比较以及交换数据的位置。排序的方法和策略有多种,以下假设数据保存在A[n]数组里,并且排序的顺序为升序。
冒泡排序(Bubble Sort)
主要策略:
不断地比较相邻的两个元素,并让相邻的两个元素保持有序。
让J从1到N-1循环扫描A[J],并检查A[j]以及紧接其后A[j+1]的数值,若A[j] A[j+1]就让A[j]与A[j+1] 交换数据,这样A[j]就比A[j+1]小,A[j]和A[j+1]就是升序了。注意这样不能保证A[j]与其前面的A[j-1]是否有序。
上述J从1到N-1循环扫描A[J],让相邻的两个元素保持有序,这叫一轮扫描比较。这一轮扫描,有部分数据经过与相邻元素交换后为比原先更接近他应该在的位置了。
重复多轮的轮扫描比较,直到整轮比较都没有元素进行交换,说明大功告成了。
优化:
每次交换时,小的数只向前移动一个位置,但大的数会跟着扫描往下沉,因此每轮扫描后最大的数一定沉到最后,但小的数只移动一个位置。这样每轮扫面可以比上轮扫描少比较一个元素。我们可以确定经过n-1轮的扫描就能排好顺序。
另外的优化就是检测在一轮扫描过程中如果没有发生交换,那就可以结束排序。
双向冒泡优化,每轮扫描最大的沉底,如果第一轮从1到n-1扫描,第2轮从n-1到2反向扫描,如此一正一反的双向冒泡也能大大提高排序速度。
程序片断:(未优化)
For i:= 1 To n-1 do {需要进行n-1轮扫描。思考为什么只要n-1轮}
For j:= 1 to n-I do begin {准备一轮扫描。为什么只扫描到n-I,而不是n-I+1}
If a[j]a[j+1] then begin {a[j]与a[j+1]顺序不对,需要交换数值}
temp:= a[j]; {a[j]与a[j+1]交换数值}
a[j]:= a[j+1];
a[j+1]:=temp;
End;
End; {这是未经优化的程序}
优缺点:思路简单,比较和交换的操作太频繁了速度很慢。
排序过程演示:
下标 0 1 2 3 4 5 6 数值 5 7 8 3 2 比较 5 7 8 3 2 比较 5 7 8 3 2 比较 5 7 8 3 2 交换 5 7 3 8 2 比较 5 7 3 8 2 交换 5 7 3 2 8 一轮 5 7 3 2 8 比较 5 7 3 2 8 比较 5 7 3 2 8 交换 5 3 7 2 8 比较 5 3 7 2 8 交换 5 3 2 7 8 二轮 5 3 2 7 8 …… 选择排序(Selection sort)
2.1、主要策略:
冒泡排序,交换的操作太频繁了,我们的策略改成每轮找出最小的数,然后把他与第1个元素交换。
第1轮从A[1]到A[N]扫描找出最小的数,然后把他与A[1]交换。
第2轮从A[2]到A[N]扫描找出最小的数,然后把他与A[2]交换。依此类推
2.2、优化:
为了减少交换的次数,每轮扫描时记住最小数的位置,直到该轮扫描结束后才交换。
2.3、程序片断:(未优化)
For i:= 1 To n-1 do {需要进行n-1轮扫描}
For j:= i+1 to n do begin {一轮扫描,该轮最小数保存在a[i]因此从i+1扫描}
If a[i]a[j] then begin {a[i]不是最小数,需要交换}
t:= a[j]; a[j]:= a[i]; a[i]:=t; {a[i]与a[j]交换}
End;
End; {这是未经优化的程序}
2.4、排序过程演示:
下标 0 1 2 3 4 5 6 数值 5 7 8 3 2 比较 5 7 8 3 2 比较 5 7 8 3 2 比较 5 7 8 3 2 交换 3 7 8 5 2 比较 3 7 8 5 2 交换 2 7 8 5 3 一轮 2 7 8 5 3 比较 2 7 8 5 3 交换 2 7 8 5 3 比较 2 5 8 7 3 比较 2 5 8 7 3 交换 2 3 8 7 5
文档评论(0)