分治法的基本思想:將原問題分解為若干個更小的與原問題相似的問題,然後遞迴解決各個子問題,最後再將各個子問題的解組合成原問題的解。
利用分治法可以將解決辦法分為「三步走」戰略:
(1)在資料集中選定乙個元素作為「基準」(pivot)
(2)將所有資料集小於基準的元素放在基準左邊,大於基準的元素放在基準右邊,把原資料集分為兩個資料集的操作叫做「分割槽」,分割槽結束後基準所在的位置也就是基準最後的位置
(3)分別對基準左右兩邊的資料集進行前兩個步驟,直至資料集只剩下乙個資料為止
//章節:第四章
//內容:快速排序
(1)取5
作為pivot,然後將其移動到最後乙個位置
(2)從第乙個數3
到倒數第二個數5
分別和pivot比較,如果小於等於pivot的數依次從前向後排
(4)將pivot5
移回兩個分割槽中間
C語言實現分治法
我用了大約三種方法實現,逐漸減少時間複雜度,分別用不同的命名 方式來區分他們,順便列印了那個子區間的和值最大,maxsum 1 用陣列的方式實現三次遍歷,求出所有子串行的和值,並且比較大小,求出最大子串行值 maxsum 2 用另乙個陣列來儲存從下標0開始的所有和值,然後操作次此序列,用減的方式,來...
分治法 快速排序
演算法的思想 將大的問題化為小問題 問題性質不變 快速排序是在比較排序中相對較快,所以稱為快速排序。對於乙個陣列a n 快速排序中分界值需要取n次也就是說,每乙個下標對應的值都需要取一次。源 如下 include using namespace std template int partition ...
快速排序,分治法
平均時間複雜度是 o nlogn 在傳入的陣列為倒序時,將出現最壞的情況,時間複雜度為o n 2 private static void myquicksort int arr,int start,int end int divideindex divide arr,start,end 分治法,按d...