分治算法之快速排序
1、快速排序
通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序
2、思路
( 1 )分解:先從數列中取出一個元素作為基準元素。以基準元素為標準,將問題分解為兩個子序列,使小于或等于基準元素的子序列在左側,使大于基準元素的子序列在右側。
假設當前待排序的序列為 R[low:high] ,其中 low ≤ high 。
步驟 1 :首先取數組的第一個元素作為基準元素 pivot=R[low] 。 i=low , j=high 。
步驟 2 :從右向左掃描,找小于等于 pivot 的數,如果找到, R[i] 和 R[j] 交換, i++ 。
步驟 3 :從左向右掃描,找大于 pivot 的數,如果找到, R[i] 和 R[j] 交換, j?? 。
步驟 4 :重復步驟 2 ~步驟 3 ,直到 i 和 j 指針重合,返回該位置 mid=i ,該位置的數正好是 pivot 元素。
( 2 )治理:對兩個子序列進行快速排序。
( 3 )合并:將排好序的兩個子序列合并在一起,得到原問題的解。
3、代碼實現
#include <iostream>using namespace std;#define length 100//讓小于某個值的所以數排在它前面,所有大于它的數據排后面 void swap(int *a, int 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 分治算法之合并排序
- 下一篇: 动态规划之两个字符串的最大子序列