知识大全 排序 - 交换排序 - 冒泡排序(一)

Posted

篇首语:仓廪实则知礼节,衣食足则知荣辱。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 排序 - 交换排序 - 冒泡排序(一)相关的知识,希望对你有一定的参考价值。

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

  应用交换排序基本思想的主要排序方法有 冒泡排序和快速排序

  冒泡排序

   排序方法

  将被排序的记录数组R[ n]垂直排列 每个记录R[i]看作是重量为R[i] key的气泡 根据轻气泡不能在重气泡之下的原则 从

  下往上扫描数组R 凡扫描到违反本原则的轻气泡 就使其向上 飘浮 如此反复进行 直到最后任何两个气泡都是轻者在上 重者

  在下为止

  ( )初始

  R[ n]为无序区

  ( )第一趟扫描

  从无序区底部向上依次比较相邻的两个气泡的重量 若发现轻者在下 重者在上 则交换二者的位置 即依次比较(R[n] R[n

   ]) (R[n ] R[n ]) … (R[ ] R[ ]);对于每对气泡(R[j+ ] R[j]) 若R[j+ ] key

  R[j]的内容。WiNGWIT.cOm

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

  (3)第二趟扫描

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

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

  注意:

  第i趟扫描时,R[1..i-1]和R[i..n]分别为当前的有序区和无序区。扫描仍是从无序区底部向上直至该区顶部。扫描完毕时,该

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

  2、冒泡排序过程示例

  对关键字序列为49 38 65 97 76 13 27 49 的文件进行冒泡排序的过程【 参见动画演示 】

  3、排序算法

  (1)分析

  因为每一趟排序都使有序区增加了一个气泡,在经过n-1趟排序之后,有序区中就有n-1个气泡,而无序区中气泡的重量总是大于

  等于有序区中气泡的重量,所以整个冒泡排序过程至多需要进行n-1趟排序。

  若在某一趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则,因此,冒泡排

  序过程可在此趟排序后终止。为此,在下面给出的算法中,引入一个布尔量exchange,在每趟排序开始前,先将其置为FALSE。若排

  序过程中发生了交换,则将其置为TRUE。各趟排序结束时检查exchange,若未曾发生过交换则终止算法,不再进行下一趟排序。

  (2)具体算法

  void BubbleSort(SeqList R)

   //R(l..n)是待排序的文件,采用自下向上扫描,对R做冒泡排序

  int i,j;

  Boolean exchange; //交换标志

  for(i=1;i

  exchange=FALSE; //本趟排序开始前,交换标志应为假

  for(j=n-1;j>=i;j--) //对当前无序区R[i..n]自下向上扫描

  if(R[j+1].key

  R[0]=R[j+1]; //R[0]不是哨兵,仅做暂存单元

  R[j+1]=R[j];

  R[j]=R[0];

  exchange=TRUE; //发生了交换,故将交换标志置为真

  

  if(!exchange) //本趟排序未发生交换,提前终止算法

  return;

   //endfor(外循环)

   //BubbleSort

cha138/Article/program/sjjg/201311/23802

相关参考

知识大全 排序 - 交换排序 - 冒泡排序(二)

  算法分析  ()算法的最好时间复杂度  若文件的初始状态是正序的一趟扫描即可完成排序所需的关键字比较次数C和记录移动次数M均达到最小值  Cmin=n  Mmin=  冒泡排序最好的时间复杂度为O

知识大全 冒泡排序与插入排序

  今天我回顾了一下原来的排序方法现在分享如下冒泡排序两种实现方式一个是直接实现如下  int[]a=;  inttemp=;  for(inti=;ia[j+])    temp=a[j];  a[

知识大全 数据结构第七章(图)串讲+复习要点

  排序是组织数据最基本的运算排序的方法也很多本章给出了几种典型的排序方法见下表  排序类别插入排序交换排序选择排序归并排序分配排序  排序方法直接插入冒泡法直接选择*归并排序箱排序  希尔排序*快速

知识大全 PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解

PHP冒泡排序二分查找顺序查找二维数组排序算法函数的详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 排序 - 交换排序 - 快速排序 (一)

  快速排序(QuickSort)  算法思想  快速排序是CRAHoare于年提出的一种划分交换排序它采用了一种分治的策略通常称其为分治法(Divideand  ConquerMethod)  ()

知识大全 排序 - 分配排序 - 箱排序 (一)

  按平均时间将排序分为四类  ()平方阶(O(n))排序  一般称为简单排序例如直接插入直接选择和冒泡排序;  ()线性对数阶(O(nlgn))排序  如快速堆和归并排序;  ()O(n+£)阶排序

知识大全 简单介绍C#冒泡排序

简单介绍C#冒泡排序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  今天主要是将排序算法中最简单

知识大全 Java冒泡排序法

Java冒泡排序法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  publicclassMySo

知识大全 php中实现快排与冒泡排序

  快排  <?php  functionquicksort($str)  if(count($str)<=)return$str;//如果个数不大于一直接返回  $key=$str[];

知识大全 排序 - 交换排序 - 快速排序 (三)

  快速排序执行过程  快速排序执行的全过程可用递归树来描述  >  >  分析  ()递归执行的路线如图中带箭头的包络线所示  ()递归树上每一结点左旁方括号表示当前待排序的区间结点内的关键字是划分