排序演算法複習 快速排序

2022-08-29 10:33:11 字數 760 閱讀 6210

基本思想是:

1.先從數列中取出乙個數作為基準數pivot。

2.分割槽過程,將比這個數大的數全放到pivot的右邊,」小於或等於它的數全放到pivot的左邊「。

3.再對左右區間重複第二步,直到各區間只有乙個數。

難點在第2步:找到pivot的位置。pivot理解成中間值,是數列的中間某位置上。pivot左邊的數小於它,pivot右邊的數大於它。

實現:從左右兩端開始挑毛病,不符合自己標準的放到對方的隊伍中。在步驟1中取數列左邊第乙個數作為pivot,此時左一的狀態是「空位」的,從最右邊開始找不大於pivot的數,放到左邊空位。此時,最右邊的位置空著了,從左邊找不小於pivot的數,放到最右邊。左邊有空位了,再從右邊剩下的位置找小於pivot的數...... 當左右遍歷相遇時,就是pivot的位置了!

發明演算法的人是如何想到的,我們就不用研究了,能用**實現它,就夠了。

1

void quick_sort(int s,int l,intr)2

19 s[i] =pivot;

20 quick_sort(s, l, i-1

);21 quick_sort(s, i+1

, r);22}

2324

25 }

優化:1. 步驟1 中基準pivot的選取,可以用「三數取中」法。即數列的左端,右端,中間三個數取中間大小的。

2. 陣列元素個數少時,最好用直接插入排序。

未完待續。。。。。。

基礎演算法複習 快速排序

1.最近一直在忙課程,每天只能抽空刷幾道leetcode,好久沒看js了.有點慌,但是先抽空把排序演算法啥的寫一遍吧,等忙完作業系統課設再好好複習js.2.快速排序演算法思想大概就是設定乙個基準值,根據基準值不斷地交換陣列中前後的元素值,在此過程中目的是把基準值排序到最終的位置,再對基準值位置之前和...

複習 冒泡,快速 排序

氣泡排序是面試最基礎的內容一定要會 氣泡排序的思想 對於一組陣列 針對從大到小 每次迴圈乙個乙個比較找到乙個最大的數放置末尾,後一次迴圈的數個數將會比前一次少1,因為已經確定了乙個數的位置,以此下去將會排完所有資料。來張圖看把清楚點 氣泡排序通常使用兩個for迴圈 第乙個for迴圈則是確定迴圈輪數 ...

排序演算法複習

參考自 直接插入排序 從小到大排列 n個資料,第乙個資料平凡有序 假設前i 1個資料串有序,根據第i個的大小將第i個插入到此串中,則前i個的資料串也有序。因此可得到n個資料有序。插入方法 待插入元素為第i元素,數值存為temp,將 i 之前的元素 j 從第 i 1 元素開始與之比較 如果比temp大...