1. 程式人生 > >八大排序演算法詳解——氣泡排序

八大排序演算法詳解——氣泡排序

基本思想

將被排序的記錄陣列R[0..n-1]垂直排列,每個記錄R[i]看作是重量為R[i].key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃描陣列R:凡掃描到違反本原則的輕氣泡,就使其 向上”飄浮”。如此反覆進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。
具體過程,如下所示:

  1. 初始狀態:R[0..n-1]為無序區。
  2. 第一趟掃描:從無序區底部向上依次比較相鄰的兩個氣泡的重量,若發現輕者在下、重者 在上,則交換二者的位置,即依次比較(R[n-1], R[n-2])、(R[n-2], R[n-3])、…、(R[1], R[0]);對於每對氣泡(R[j+1], R[j]),若R[j+1].key第一趟掃描完畢時,”最輕”的氣泡就飄浮到該區間的頂部,即關鍵字最小的記錄被放在最高位置R[0]上。
  3. 第二趟掃描:掃描R[1..n-1]。掃描完畢時,”次輕”的氣泡飄浮到R[1]的位置上……最後,經過n-1趟掃描可得到有序區R[0..n-1]。

注意:
第i趟掃描時,R[0..i-1]和R[i..n-1]分別為當前的有序區和無序區。掃描仍是從無序區底 部向上直至該區頂部。掃描完畢時,該區中最輕氣泡飄浮到頂部位置R[i]上,結果是R[0..i]變為新的有序區。

演算法實現

氣泡排序演算法,Java實現,程式碼如下所示:

相關推薦

八大排序演算法——氣泡排序

基本思想 將被排序的記錄陣列R[0..n-1]垂直排列,每個記錄R[i]看作是重量為R[i].key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃描陣列R:凡掃描到違反本原則的輕氣泡,就使其 向上”飄浮”。如此反覆進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。 具體過程,如下所示:

Python四大流行排序演算法--快速排序-氣泡排序-選擇排序-插入排序

就作者而言使用Python經常用到的排序演算法就是快速排序、氣泡排序、選擇排序以及插入排序       就時間複雜度而言,快速排序是高階排序,查詢快速,時間複雜度為nlgn      而氣泡排序、選擇排序、插入排序則是比較低階的查詢演算法,時間複雜度為n**2 下面

八大排序演算法——歸併排序

基本思想 n個記錄的檔案的直接選擇排序可經過n-1趟直接選擇排序得到有序結果: 初始狀態:無序區為R[1..n],有序區為空。 第1趟排序: 在無序區R[1..n]中選出關鍵字最小的記錄R[k],將它與無序區的第1個記錄R[1] 交換,使R[1..1

八大排序演算法——快速排序

基本思想 設當前待排序的陣列無序區為R[low..high],利用分治法可將快速排序的基本思想描述為: 分解: 在R[low..high]中任選一個記錄作為基準(Pivot),以此基準將當前無序區劃分為左、右兩個較小的子區間R[low..pivotpos-1)和R[pivotpos+1..hig

資料結構 7 基礎排序演算法 雞尾酒排序法、瞭解鐘擺排序實現

## 前言 上節,我們已經通過對冒泡演算法的優化、能夠達到我們預想的結果。比較次數的減少、本節將繼續在氣泡排序的基礎上進行優化、能夠達到剛好的效果。 ## 雞尾酒排序

經典排序演算法(1)——氣泡排序演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C語言實現八大排序演算法及其效能之間的

概述 排序是資料結構中的重要一節,也是演算法的重要組成部分。主要分為內部排序以及外部排序,今天我們講內部排序,也就是八大排序。 插入排序 直接插入排序 演算法思想 演算

經典排序演算法——氣泡排序演算法

一、演算法基本思想 (1)基本思想 氣泡排序的基本思想就是:從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大(小)的資料元素交換到了無序佇列的隊尾,從而成為有序序列的一部分;下一次繼續這個過程,直到所有資料元素都排好序。 演算法的核心在於每次通過兩兩比較交換位置,選

#關於選擇排序氣泡排序演算法

關於選擇排序與氣泡排序演算法詳解 本篇主要應C語言初學者對氣泡排序和選擇排序的一個初步介紹和認知 首先我們來認識下選擇排序 那什麼是選擇排序呢?選擇排序就是指在一推數組裡每一次從待排序的資料元素中選出最小(或最大)的一個元素,放在陣列最末的位置(最前面的位置也可

必須知道的八大排序演算法【java實現】(三) 歸併排序演算法、堆排序演算法

一、歸併排序演算法 基本思想:   歸併(Merge)排序法是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然後再把有序子序列合併為整體有序序列。 歸併排序示例:   合併方法: 設r[i…n]由兩個有序子表r[i…m]和r[m+1…n]組

九種經典排序演算法氣泡排序,插入排序,選擇排序,快速排序,歸併排序,堆排序,計數排序,桶排序,基數排序

綜述 最近複習了各種排序演算法,記錄了一下學習總結和心得,希望對大家能有所幫助。本文介紹了氣泡排序、插入排序、選擇排序、快速排序、歸併排序、堆排序、計數排序、桶排序、基數排序9種經典的排序演算法。針對每種排序演算法分析了演算法的主要思路,每個演算法都附上了虛擬

氣泡排序演算法C++程式

(1)氣泡排序演算法:(Bubble Sort)首先肯定是一種簡單的排序演算法,它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。 走訪數列的工作是重複地進行直到沒有

各種排序演算法C++實現

1.氣泡排序 時間複雜度 O ( n

經典排序演算法(4)——折半插入排序演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

常用Java排序演算法

  一、最小堆排序(MinHeapSort) 基本原理:對於給定的n個記錄,初始時把這些記錄看作一顆順序儲存的二叉樹,然後將其調整為一個小頂堆,然後將堆的最後一個元素與堆頂元素進行交換後,堆的最後一個元素即為最小記錄;接著講前(n-1)個元素重新調整為一個小頂堆,再將堆頂元素與當前

排序演算法及實現-----------c語言

堆排序原理:   堆排序指的是將大堆(小堆)堆頂(即下標為0)元素與堆的最後一個(即下標為hp->size - 1)元素交換,hp->size–,將其餘的元素再次調整成大堆(小堆),再次將堆頂(即下標為0)元素與堆的最後一個(即下標為hp->s

基礎排序演算法與優化

1. 談談基礎排序 常見的基礎排序有選擇排序、氣泡排序和插入排序。眾所周知,他們的時間複雜度是 O(n*n)。 但是,現在要重新認識一下基礎排序演算法,尤其是“插入排序”:在近乎有序的情況下,插入排序的時間複雜度可以降低到 O(n)的程度。 因此,在處理系統日

選擇排序演算法

基本思想: 在要排序的一組數中,選出最小的一個數與第一個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後一個數比較為止。     實現: public static void selectSort(in

插入排序演算法

插入排序:時間複雜度為O(n*n)。 原理:         1、假定待排序陣列部分有序,一般取陣列的第一個元素作為有序序列,其它的n-1個元素為無序序列;        2、每次取無序序列中一個元素e(

快速排序演算法(原理、實現和時間複雜度)

快速排序是對氣泡排序的一種改進,由 C.A.R.Hoare(Charles Antony Richard Hoare,東尼·霍爾)在 1962 年提出。 快速排序的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料比另一部分的所有資料要小,再按這種方法對這兩部分資料分別進行快速排