分治法的精髓:
分–將問題分解為規模更小的子問題;
治–將這些規模更小的子問題逐個擊破;
合–將已解決的子問題合併,最終得出「母」問題的解;
快速排序原理:從一組數中選出乙個pivot(中心軸),將大於它的數放右邊,小於它的數放左邊,然後再從左邊和右邊的倆組數中分別執行此操作,此時,陣列就是有序的了。
//
// created by a1073 on 2019/7/4.
//#include
void
quicksort
(int
,int
,int);
intmain
(void);
quicksort
(array,0,
5);for
(int i =
0; i <6;
++i)
return0;
}void
quicksort
(int array,
int left,
int right)
while
(array[j]
> pivot)
if(i <= j)}/*
* 此刻i在j的右邊
* 必須進行判斷才能進行遞迴
* 否則在到最後無法停止遞迴
* */
if(j > left)
if(i < right)
}
千萬注意最後的結束條件!!!
分治 快排 快選
快排模板 include using namespace std const int n 1e5 10 int n,a n void quick sort int q,int l,int r quick sort q,l,j quick sort q,j 1,r intmain 快速選擇演算法 選擇...
分治法 快排劃分法(單向掃瞄法)
一 分治法 將乙個規模較大的問題轉化為多個相同形式小規模的子問題,子問題規模較小時,可自然求解。子問題的解可通過合併得到原問題的解。舉例 小明讓小張和小李去借2000元,小張借1000,小李借1000,他們各自向朋友去借,這就是乙個分治問題 思路 用兩個指標將陣列劃分為三個區間。掃瞄指標左邊是確認小...
分治排序之快排
歸併排序和快排 分而治之排序的方法包括歸併排序和快排,歸併排序partition簡單,merge比較複雜,易分難合併 快排的特點則是 難分易合併 快排首先要先確定中心點pivot的選取規則,pivot把陣列分為兩部分,左邊的數都小於pivot,右邊的數都大於等於pivot,然後左右兩部分繼續快排,直...