效能分析:
時間複雜度: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#includeusing
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.根據分割位置,分別遞迴...