二、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.最簡單的桶排序演算法 ...