演算法 快速排序 基於分治思想的實現

2021-07-22 05:59:14 字數 591 閱讀 5238

今天看了《演算法導論》的快排部分,又更加理解了這個演算法

現在將它實現了,以後就直接用了

備註:主元 x 的選擇,可以採用隨機選擇,避免碰到輸入為接近排序的那種序列,防止時間複雜度下降到o(n^2)

#include using namespace std;

// 這個函式的作用是將陣列a從下標p到r這部分進行乙個劃分

// 將a[r]放到合理的位置(下標q處),使得 任意 p<=i= a[q]

int partition ( int* a, int p, int r )

}a[r] = a[i+1];

a[i+1] = x;

return i+1;

}// 將陣列a[p...r]從小到大排序

void quick_sort ( int* a, int p, int r )

}int main()

; int len = sizeof(a)/sizeof(int);

quick_sort(a,0, len-1);

for( int i = 0; i < len; ++i )

}

基於分治演算法的快速排序

include include include using namespace std const int maxn 10010 int a maxn int n 快排的思路是兩步 split 分治,我們不妨約定,陣列從1開始儲存有效數字 第一步是split,目的是以陣列的第乙個元素為基準,將小於它...

演算法分析 分治思想之快速排序

優化乙個演算法的最根本的原理就是減少演算法的基本操作。分治法的設計思想是,將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。於是,在快速排序中,我們通過分割陣列的思路來將大問題分割成小規模的問題,與二分搜尋法類似的是,在二分法 中,我們需要進行的操作是搜尋,是在已經排...

分治思想 快速排序

快速排序思想 設k a 0 取基準元素 將k挪到適當位置,使得比k小的元素都在k左邊,比k大的元素都在k的右邊,和k相等的,在k的左右均可。然後再把k的左邊的元素和右邊的元素按照同樣的方式進行排序。時間複雜度 n logn 空間複雜度 1 和歸併排序比較,快速排序比歸併排序更加節省空間,但是快速排序...