分治思想 快速排序

2021-10-02 11:35:48 字數 1077 閱讀 2438

快速排序思想:

設k=a[0](取基準元素),將k挪到適當位置,使得比k小的元素都在k左邊,比k大的元素都在k的右邊,和k相等的,在k的左右均可。然後再把k的左邊的元素和右邊的元素按照同樣的方式進行排序。

時間複雜度:n*logn

空間複雜度:1

和歸併排序比較,快速排序比歸併排序更加節省空間,但是快速排序的穩定性要比歸併排序差。

這裡快排的**沒有對基準元素進行優化,屬於最原始的快排**。在快排的單陣列比較的**中,給了2種對比的方式。

**:

#include using namespace std;

void quicksort(int arr, int left, int right);//快排1

void quicksort2(int arr, int left, int right);//快排2

void swap(int& a, int& b);

int main()

;//初始待排序陣列

int size = sizeof(arr) / sizeof(int);

int left = 0, right = size - 1;

quicksort(arr, left, right);

for (int i = 0; i < size; i++)//輸出arr陣列

cout << arr[i] << " ";

return 0;

}void quicksort(int arr, int left, int right)

else if (key > arr[j])

else

j++;

} quicksort(arr, left, i-1);

quicksort(arr, i+1,right); }}

void swap(int& a, int& b)

void quicksort2(int arr, int left, int right)

} quicksort2(arr, left, i-1);

quicksort2(arr, i+1, right);

}

歸併排序 快速排序 分治思想

蒟蒻來水一篇博文方便複習參考 快速排序的基本原理 隨機選擇乙個基點,將比基點大的元素放在基點左側,將比基點小的元素放在基點右側。然後再分別只看基點左側和右側,重複上述過程。由於其利用了分治思想,在平均狀態下其時間複雜度為o nlogn 基本 如下 includeusing namespace std...

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

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

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

今天看了 演算法導論 的快排部分,又更加理解了這個演算法 現在將它實現了,以後就直接用了 備註 主元 x 的選擇,可以採用隨機選擇,避免碰到輸入為接近排序的那種序列,防止時間複雜度下降到o n 2 include using namespace std 這個函式的作用是將陣列a從下標p到r這部分進行...