C 快速排序

2022-07-08 23:24:18 字數 1782 閱讀 6401

效能分析:

時間複雜度:o(n*log(n))

空間複雜度:o(log(n))

這裡的時間複雜度其實是快速排序最好的時間複雜度,最壞的時間複雜度是o(n^2)

**裡補充的隨機化快速排序的期望時間複雜度為:o(n*log(n))

快速排序的效能優於歸併排序是因為常數項,即演算法所需的固定時間量。

#include#include

#include

#include

#include

using

namespace

std;

int partition(vector& data, int left, int

right);

void quick_sort(vector& data, int left, int

right);

intmain()

;

//獲取序列元素個數

int length =data.size();

int left = 0

;

int right = 3

; vector

result;

quick_sort(data, left, right);

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

}void quick_sort(vector& data, int left, int

right)

}int partition(vector& data, int left, int

right)

}//此時中軸數的正確位置應該在i+1,將其歸位.

//思考為什麼是i+1而不是i.

int temp = data.at(i + 1

); data.at(i + 1) =data.at(right);

data.at(right) =temp;

//返回中軸數的正確索引.

return i + 1

;}

另一種,實現動態輸入:

#include#include

using

namespace

std;

void quick_sort(vector& data, int left, int

right)

//否則就開始在原陣列上選區基準值進行交換

int key = data[right]; //

選區最後乙個數

int i = left - 1

;

for (int j = left; j < right; j++)

}//將基準值放到i+1的位置

swap(data[i + 1

], data[right]);

//i+1就是分界點

int index = i + 1

; quick_sort(data, left, index - 1

); quick_sort(data, index + 1

, right);

}int

main()

int left = 0

;

int right = data.size() - 1

; quick_sort(data, left, right);

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

cout

}

排序 快速排序(C )

1 演算法描述 1.1 設當前參加排序的陣列為array 0.n 1 選擇乙個元素 通常稱該元素為基準元素 作為基準元素 將小於或者等於基準元素的所有元素都移到基準元素的左邊 把大於或者等於基準元素的所有元素都移到分界元素的右邊 執行完 2 3 步驟後,基準元素左邊元素序列,基準元素,基準元素右邊元...

排序 快速排序(C )

如果看不懂這些乾巴巴的理 字,那就先不用看了,下面 中有詳細的注釋,大家可以先跟著 走幾遍,回過頭來再看這些文字描述,總之 紙上得來終覺淺,絕知此事要躬行。排序演算法哪家強,從實際應用的角度上將,快排表現很好。很自然地,人們會覺得短陣列比長陣列更好處理,因此可能會想到將原始陣列分為若干各子部分然後分...

快速排序 c

快速排序應該是目前最快,也是最常用的一種排序演算法。它將乙個集合劃分成兩個子集合,然後繼續遞迴來完成最終排序。具體做法 1.選取集合最右端的元素作為乙個參照物,稱之為 樞紐 pivot 2.開始計算分割位置。在計算時,進行元素交換,確保左側元素都小於樞紐,而右側都大於樞紐。3.根據分割位置,分別遞迴...