C語言實現快速排序演算法

2021-10-01 04:35:03 字數 1339 閱讀 2071

快速排序是c.a.r.hoare於2023年發明的。
演算法的基本思想是:遞迴。

對於乙個給定的陣列,從中任意選取乙個元素,以這個元素為界,

將其餘元素劃分為兩個子集,乙個子集要求全部小於這個元素,另乙個子集要求全部

大於或等於這個元素。對這兩個子集遞迴執行這個過程,當某個子集中的元素個數

小於2時,終止遞迴。

在排序過程中,需要頻繁比較和調換陣列內兩個元素的位置,

我們這裡設計乙個交換兩個元素的函式,十分簡單。

呼叫該函式能夠交換arry陣列中,位置i和位置j的兩個元素。

i和j是陣列內任意的下標。

void swap(uint16_t *arry, uint8_t i, uint8_t j)

排序過程,如下**:

int sortq(uint16_t *arry, int left, int right)

temp = left;

for (i = left + 1; i <= right; i++)

}swap(arry, left, temp);

sortq(arry, left, temp-1);

sortq(arry, temp+1, right);

}

主函式中,直接呼叫該函式,實現如下:

#include #include #include int main(int argc, const char *ar**)

; int data_len = 10;

sortq(data, 0, 9);

printf("data is:");

while (data_len-- > 0)

printf("\n");

return 0;

}

快速排序函式選取陣列第乙個元素作為排序分界元素,

然後用第二個元素到最後乙個元素,依次與分界元素比較

如果找到任意乙個小於分界元素的物件,則將這個物件從第二個

位置開始交換,每找到乙個物件,就交換一下,於是有了++temp

操作。temp是小於分界元素的最後乙個物件。而不是第乙個大於

等於分界元素的物件。這一點跟滿空棧概念一致。經過一輪交換

後,遞迴呼叫左右子集的交換,直到小於2個元素的子集出現,

則終止該子集。

該演算法選取分界元素時,當選取到最小或者最大的元素時,會

花費最常的時間,等於其他演算法。所以存在不確定性。

其效率是:o(n*logn) 在所有相同效率模型的演算法中,其效率

最高。

快速排序演算法 C語言實現

快速排序演算法 c語言實現 注 本篇內容為翻譯,之所以選擇這篇進行翻譯原因是該文章含有動畫,能夠更加直觀地展示快速排序。同時,可以仔細看一下 中把結構化的思想給予了更加充分地表現。按照功能進行模組劃分的思想得到了徹底地貫徹。以下內容翻譯自 譯文 在快速排序演算法中,使用了分治策略。首先把序列分成兩個...

快速排序演算法 C語言實現

注 本篇內容為翻譯,之所以選擇這篇進行翻譯原因是該文章含有動畫,能夠更加直觀地展示快速排序。同時,可以仔細看一下 中把結構化的思想給予了更加充分地表現。按照功能進行模組劃分的思想得到了徹底地貫徹。以下內容翻譯自 譯文 在快速排序演算法中,使用了分治策略。首先把序列分成兩個子串行,遞迴地對子序列進行排...

快速排序演算法(C語言實現)

自實現部分可參看慕課網陳越老師資料結構課程。庫函式函式原型 void qsort void buf,size t num,size t size,int compare const void const void 函式說明 對buf指向對資料 包含num項,每項的大小為size 進行快速排序。voi...