演算法 分治演算法(以快排為例)

2021-09-29 09:31:11 字數 987 閱讀 6747

將大問題轉化成小問題,用遞迴的策略來解決問題

1.快速排序

基本思想:

選乙個元素作為基準,將小於和大於該元素的值分別進行排序,最後,將小於該元素的那部分值,該元素,大於該元素的那部分值,合併,就是最終的結果。

完整**:

/*快排遞迴演算法*/

#include

using

namespace std;

vector<

int>

quicksort

(vector<

int> num)

}//分別對less、max進行遞迴排序

less=

quicksort

(less)

; max=

quicksort

(max)

;//將排序結果放在res中

res.

assign

(less.

begin()

,less.

end())

; res.

push_back

(p);

res.

insert

(res.

end(

),max.

begin()

,max.

end())

;return res;

}int

main()

num=

quicksort

(num)

;for

(int i=

0;isize()

;i++

)return0;

}

時間複雜度:

o(nlogn)

這裡所說的時間複雜度是平均時間複雜度

在最壞的情況下,快排的時間複雜度是o(n^2)

說明一點:快排的速度和選擇的基準密切相關

2011 4 15 快排演算法,堆排演算法

template int get pivot index value type array,int start,int end value type pivot array start while start end while startpivot end array start array en...

排序演算法 快排

今天聊聊排序演算法,排序演算法平時也會用到,有很多比如,冒泡,快排,選擇,歸併排序等 今天就聊一聊快速排序演算法排序演算法的乙個宗旨就是經過一趟排序,何為一趟排序呢?就是遍歷完一次陣列,陣列中的一部分資料比另外一部分的資料都要小 當然這兩部分資料內部仍然是無序的,然後我們再對這兩部分資料分別進行排序...

快排演算法問題

今天又複習了下快速排序,主要思想是先把陣列的最左邊的這個數作為乙個基準數,然後在通過類似二分法把大於基準數的數放在右邊,小於基準數的數放在左邊。這就是其主要思想。c 如下 include include using namespace std int a 11 void quick sort int...