您的位置:首页 > 理论基础 > 数据结构算法

图解"数据结构--内部排序算法"----交换排序:冒泡排序、快速排序

2012-10-29 11:48 609 查看

一、交换排序的基本思想

两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。



二、交换排序分类

本文介绍两种交换排序方法:冒泡排序、快速排序

2.1 冒泡排序

2.1.1 冒泡排序基本思想

每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列重复前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了.因此,复杂度在最坏的情况下是O(N ^2).

2.1.2 冒泡排序实现过程

将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。

(1)初始

  R[1..n]为无序区。



(2)第一趟扫描

从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较(R
,R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].key<R[j].key,则交换R[j+1]和R[j]的内容。

  第一趟扫描完毕时,"最轻"的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置R[1]上。



(3)第二趟扫描

  扫描R[2..n]。扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上……

 最后,经过n-1 趟扫描可得到有序区R[1..n]

注意: 1.第i趟扫描时,R[1..i-1]和R[i..n]分别为当前的有序区和无序区;

2.扫描仍是从无序区底部向上直至该区顶部;

3.扫描完毕时,该区中最轻气泡飘浮到顶部位置R[i]上,结果是R[1..i]变为新的有序区。

2.1.3 举例说明"冒泡排序的排序过程"

待排序的记录数组(23,34,5,7,56),设想待排序数组垂直竖立。






待排序数组(6,8,5,7,4)完整的排序过程



更多"冒泡排序测试",到《冒泡排序动画演示

2.2 快速排序

2.2.1快速排序算法的基本思想

每一趟排序中找一个点pivot,将表分割成独立的两部分,其中一部分的所有Record都比pivot小,另一部分比pivot大,然后再按此方法对这两部分数据分别进行快速排序。

快速排序采用了分治法的思想。



2.2.2 分治法的基本思想

将问题分解为若干个规模更小但结构与原问题相似的子问题;递归地解这些子问题,然后将这些子问题的解组合为原问题的解。



2.2.3 举例说明"快速排序的排序过程"

待排序数组(49,38,5,34,54,3,23)






待排序数组(49,38,65,34,97,76,13,27,49),第1趟完整的快速排序过程





更多"快速排序测试",到,见《快速排序动画演示


返回《内部排序综述
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: