資料結構 C語言實現快速排序演算法

2021-10-11 08:32:05 字數 1096 閱讀 2735

先從數列中選取乙個數為基準數;

把所有大於基準數的數放在基準數的右邊,小於基準數的放在左邊;

對上面的數列以上個基準數為軸,分別對左右兩個數列再次遞迴呼叫函式選擇新的基準數繼續比較;

#include

intquick

(int arry,

int left,

int right)

} arry[left]

= arry[l]

; arry[l]

= key;

//當相遇時則執行本句,即將key值與兩指標共同所指的值互換位置

//此時這組數的基準數key以右都是比key大的,以左都是比key小的

quick

(arry,left,l-1)

;//遞迴,將key左邊的數繼續以最左邊的數為基準排序

quick

(arry,l+

1,right)

;//將key右邊的數繼續以最左邊的數為基準排序

}return

*arry;

}int

main()

;quick

(arry,0,

5);for

(i =

0;i <

6;i++

)printf

("%d"

,arry[i]);

}

在本演算法中,每次選取的基準數都是數列中最左側的數,通常選取首元素或最後乙個元素作為基準數;

最優情況是數列分布較為均勻時,這個意思就是在進行第一趟排序後,第一次選取的基準數正好在數列的中心位置,這樣就把數列均勻的分布成了兩個元素個數相當的數列。若排序的數列為n個,則需要遞迴lb n次,時間複雜度為o(n lb n)

最壞情況是,每次所選的基準數為最大或最小的數,這樣的話每次經過一趟排序後被劃分的兩個數列就有乙個是空的,另乙個數列的長度為原來長度減1,時間複雜度為o(n²)

平均時間複雜度為o(n lb n)

經過分析我們可以知道,基準數的選取是影響演算法效能的關鍵。

資料結構 C語言實現排序演算法 希爾排序

希爾排序 又稱 縮小增量排序 基本思想 先將待排序列分為若干個子串行分別進行直接插入排序,待整個序列 基本有序時 再對整個序列進行一次直接插入排序。圖例 由圖例可以看出 希爾排序是通過不斷的縮小增量來實現排序的方法。c 實現 void shellsort int arr,int left,int r...

資料結構 C語言實現排序演算法 堆排序

堆排序 利用堆這種資料結構所設計的一種排序演算法。大堆 根節點值大於子節點的值,對應為公升序序列。小堆 根節點值小於子節點的值,對應為降序序列。堆排序實現的兩個步驟 建立堆堆排序 下述例子是進行大堆建立 建立大堆 圖例 建立步驟 尋找最後乙個分支的根節點 記為pos pos挨個減小,對每個分支,都進...

資料結構 C語言實現排序演算法 氣泡排序

氣泡排序 基本思想就是資料的每一趟比較就會將最大 最小 的資料放到末尾,從而達到公升序 降序 的序列。又稱石沉大海法。演算法實現步驟 從起始位置比較和下乙個位置的大小 做交換,將大數 小數 置後 依次比較置換後的數和下乙個數進行比較,置換 第一趟會將最大 最小 的數沉底,做n趟迴圈後,資料就會排好 ...