ACM基礎(四) 排序之快速排序

2021-10-05 17:43:09 字數 1308 閱讀 7674

二、c++實現

快速排序,也是分治法。

意義:就是通過pivot將陣列分成兩部分,前面的一部分小於等於pivot,後面的一部分大於pivot。

將倒數第一作為 軸 pivot

建立兩個哨i(開始再往前乙個)(i+1表示大於pivot的元素)、j(遍歷的、從開始到倒數第二)(表示當前小於等於pivot的元素)

遍歷j:如果元素a[j]小於等於軸a[r],將i加一,並且交換a[i]和a[j](或者說交換a[++i]和a[j])。作用就是將小於等於pivot的和大於pivot的交換。

最後交換a[i+1]和a[r],即將pivot交換到前部分中。

返回i+1,即pivot的下標

ps:妙,交換次數更少

先校驗partition返回個下標q(pivot的下標,之前的是小於等於它的,之後的是大於它的)

用q來分,quicksort(a,p,q-1)

quicksort(a,q+1,r)

ps:妙啊,q都不動

#include

using

namespace std;

// 陣列a部分,下標[p,r]

intpartition

(int a,

int p,

int r)

}// 將pivot交換到前部分中

swap

(a[i +1]

, a[r]);

// pivot的下標

return i +1;

}// 排序陣列a,下標[p,r]

void

quicksort

(int a,

int p,

int r)

}int

main()

;int length =

sizeof

(a)/

sizeof

(int);

quicksort

(a,0

, length -1)

;for

(int i =

0; i < length; i++

)return0;

}

ACM基礎(四) 排序之歸併排序

二 特點 三 實現 排序演算法 四 之歸併排序 分治思想理解 錯在以為最小問題是會直接比較兩個元素,真正的做法是解部分乾脆就不比較,直接劃分成單個元素,由並部分比較兩個元素及其以上 的確,歸併排序的解部分的功能和並部分的功能重複,可以寫到一起。錯誤理解 正確理解 偽 陣列a,開始下標p,結束下標r ...

四 排序演算法 快速排序

快速排序的思想 選擇陣列中的乙個數作為中軸線,然後以這個中軸線為中心,大於中軸線的資料放到右邊,小於中軸線的資料放到左邊,然後每次比較完後再變中軸線的位置,不斷比較下去 include using namespace std template void quick sort t arry,int l...

基礎演算法之四 排序 之桶排序

桶排序是迄今為止最快的一種排序,其時間複雜度僅為 n 也就是線性複雜度。其主要思想在於 建立有序的桶,遍歷待排序元素,在遍歷此元素的同時,將其對映到對應的桶中。這樣,遍歷一遍,所有的元素就在桶中有了對映。而桶是有序的,再從有序的桶中,將資料重新置於陣列中 這樣就完成了排序。1.最簡單的桶排序演算法 ...