排序演算法之氣泡排序 選擇排序

2022-07-22 03:36:12 字數 2104 閱讀 1055

排序演算法有很多,包括插入排序,氣泡排序,堆排序,歸併排序,選擇排序,計數排序,基數排序,桶排序,快速排序等。

插入排序,堆排序,選擇排序,歸併排序和快速排序,氣泡排序都是比較排序,它們通過對陣列中的元素進行比較來實現排序;其他排序演算法則是利用非比較的其他方法來獲得有關輸入陣列的排序資訊

氣泡排序(bubble sort),是一種電腦科學領域的較簡單的排序演算法。

它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。

這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端,故名。

氣泡排序演算法的運作如下:

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

(最大的數走第一趟就沉到最底,次大的數第二趟沉到最大的數上面)

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。

選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第乙個[5]與[3]交換,導致第乙個5挪動到第二個5後面)。穩定的演算法,通俗地講,就是兩個相等的數不會交換位置。這裡涉及到關鍵碼的問題。在資料結構中關鍵碼指的是資料元素中能起標識作用的資料項,例如,書目資訊中的登陸號和書名等。其中能起唯一標識作用的關鍵碼稱為「主關鍵碼」,如登陸號;反之稱為「次關鍵碼」,如書名,作者名等。通常乙個資料元素只有乙個主碼,但可以有多個次碼。

假設乙個檔案有n條紀錄,排序就是將此n個紀錄按照關鍵碼的大小遞增(或遞減)的次序排列起來,使這些紀錄由無序變為有序的一種操作。

若在待排序的紀錄中,存在兩個或兩個以上的關鍵碼值相等的紀錄,經排序後這些記錄的相對次序仍然保持不變,則稱相應的排序方法是穩定的方法,否則是不穩定的方法。

詳見這篇csdn的回答:怎樣理解選擇排序演算法的不穩定?

1 #include2 #include3 #include4

using

namespace

std;

5const

int n=10;6

intmain()723

if(i!=temp)

2428}29

for(i=0;i)

30 cout<3)<31 cout<32 }

選擇排序法的第一層迴圈從起始元素開始選到倒數第二個元素,主要是在每次進入的第二層迴圈之前,將外層迴圈的下標賦值給臨時變數,接下來的第二層迴圈中,如果發現有比這個最小位置處的元素更小的元素,則將那個更小的元素的下標賦給臨時變數,最後,在二層迴圈退出後,如果臨時變數改變,則說明,有比當前外層迴圈位置更小的元素,需要將這兩個元素交換.

簡單選擇排序的基本思想:第1趟,在待排序記錄r[1]~r[n]中選出最小的記錄,將它與r[1]交換;第2趟,在待排序記錄r[2]~r[n]中選出最小的記錄,將它與r[2]交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。

以下為簡單選擇排序的儲存狀態,其中大括號內為無序區,大括號外為有序序列:

初始序列:            

第1趟:12與49交換:12

第2趟:27不動:      12 27

第3趟:65與38交換:12 27 38

第4趟:97與49交換:12 27 38 49

第5趟:76與65交換:12 27 38 49 65

第6趟:97與76交換:12 27 38 49 65 76 97 完成

簡單選擇排序過程中需要進行的比較次數與初始狀態下待排序的記錄序列的排列情況無關。當i=1時,需進行n-1次比較;當i=2時,需進行n-2次比較;依次類推,共需要進行的比較次數是∑ =(n-1)+(n-2)+…+2+1=n(n-1)/2,即進行比較操作的時間複雜度為o(n2)。

排序演算法之氣泡排序和選擇排序

個人感覺氣泡排序和選擇排序相似,都是通過兩個for迴圈,兩兩比較實現排序過程。但比較的不同之處在於,若有n個數,氣泡排序進行n 1趟比較,第一趟進行n 1次比較,第i趟進行n i次比較,並且是連續相鄰的兩個數比較,第乙個和第二個數比,再第二個和第三個數比 而選擇排序是將n個數中第乙個數與剩下所有數比...

排序演算法之氣泡排序和選擇排序

通過for迴圈,實現排序 每次迴圈,找到乙個當前的最大值 多次迴圈,完成排序 原理 相鄰的兩個單位,比較儲存的資料 如果第乙個單元的資料較大,就將兩個相鄰單元,交換儲存資料 過程 從起始單元開始比較,第一次迴圈,會選擇出乙個最大值,放在陣列所有單元的最後 之後,每次迴圈,都會比較出乙個本次迴圈的最大...

排序演算法 氣泡排序 選擇排序

1 氣泡排序 這個氣泡排序的原理就像水裡的魚吐泡泡一樣,起初是小一點的泡泡,然後越來越大,最後的最大。演算法描述 1 設待排序序列中的記錄的數為n 2 一般的,第i趟起泡排序從1到n i 1 3 依次比較相鄰兩個記錄的數字,如果發生逆序,則交換 4 其結果是這n i 1個記錄中,關鍵字最大的記錄被交...