經典內部排序之交換排序

2021-06-21 11:24:31 字數 1696 閱讀 1674

經典內部排序演算法有交換排序、插入排序、選擇排序、歸併排序、分配排序。

分類如下:

交換排序:氣泡排序、快速排序。

插入排序:直接插入排序、折半插入排序、希爾排序。

選擇排序:直接選擇排序、堆排序。

歸併排序

分配排序:基數排序、桶排序。

本博文將介紹交換排序。

一、氣泡排序

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

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

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

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

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

void bubble_sort(int *arr,int len)

}}

演算法複雜度為o(n^2)。

二、快速排序

思想

快速排序採用的思想是分治思想。

快速排序是找出乙個元素(理論上可以隨便找乙個)作為基準(pivot),然後對陣列進行分割槽操作,使基準左邊元素的值都不大於基準值,基準右邊的元素值 都不小於基準值,如此作為基準的元素調整到排序後的正確位置。遞迴快速排序,將其他n-1個元素也調整到排序後的正確位置。最後每個元素都是在排序後的正 確位置,排序完成。所以快速排序演算法的核心演算法是分割槽操作,即如何調整基準的位置以及調整返回基準的最終位置以便分治遞迴。

舉例說明一下吧,這個可能不是太好理解。假設要排序的序列為

2   2 4 9 3 6 7 1 5 首先用2當作基準,使用i j兩個指標分別從兩邊進行掃瞄,把比2小的元素和比2大的元素分開。首先比較2和5,5比2大,j左移

2   2 4 9 3 6 71 5 比較2和1,1小於2,所以把1放在2的位置

2   1 4 9 3 6 7 1 5 比較2和4,4大於2,因此將4移動到後面

2   1 4 9 3 6 7 4 5 比較2和7,2和6,2和3,2和9,全部大於2,滿足條件,因此不變

經過第一輪的快速排序,元素變為下面的樣子

[1] 2 [9 3 6 7 4 5]

之後,在把2左邊的元素進行快排,由於只有乙個元素,因此快排結束。右邊進行快排,遞迴進行,最終生成最後的結果。

快速排序函式,通過遞迴實現

void quick_sort(int *a,int low,int high)

return ;}/*

該函式返回分割點數值所在的位置,a為待排序陣列的首位址,

low剛開始表示排序範圍內的第乙個元素的位置,逐漸向右移動,

high剛開始表示排序範圍內的最後乙個位置,逐漸向左移動

*/int findposs(int *a,int low,int high)

{ int val = a[low];

while(low < high)

{ while(low=val)

high--;

a[low] = a[high];

while(low

演算法複雜度:平均o(nlgn),最壞o(n^2)。

內部排序之交換排序

快速交換排序簡介及其 冒泡交換排序及其 交換排序總結 我們知道假如乙個已排好序的陣列,假如是從小到大公升序排列,則隨便取其中乙個數n,則n左邊所有數都小於或等於n,右邊的都大於或等於n.那反向思維下,我們先隨便取陣列第乙個數為基準x,然後將所有小於它的數交換到左邊,大於它的數交換到右邊.最後x可能就...

經典排序之交換排序

交換排序的基本思想是 對待排序資料元素,兩兩比較其關鍵字,若發現存在逆排序,則交換這兩個資料,一直到待排序資料元素中沒有逆序為止。一 氣泡排序 bubble sort 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列 的工作是...

排序專題之交換排序

在交換排序這一類中,分為氣泡排序和快速排序,快速排序是建立在 氣泡排序基礎上的乙個優化,很有意義的乙個排序,在各種acm競賽 以及其他領域中經常被用到 接下來,我們先看一看氣泡排序。氣泡排序基本思想 通過無序區中相鄰記錄關鍵字間的比較和位置的交換,使關鍵字最小的記錄如氣泡一般逐漸往上 漂浮 直至 水...