快速排序使用分治的思想,對子陣列a[p..r]進行快速排序,分3步:
1. 分解:將陣列a[p..r]劃分成兩個子陣列a[p ..q-1]和a[ q+1,..,r],使得a[p ..q-1]中的每乙個元素均小於等於a[q],
a[ q+1,..,r]中的每個元素均大於等於a[q]。
2. 解決:對子陣列a[p,..,q-1]和a[q+1,..,r]進行排序
3. 合併:因為快速排序是原址排序,所以不需要合併操作。
快速排序的執行時間依賴於劃分是否平衡,所以這裡的排序基於隨機抽樣,random_partition隨機選乙個元素做主元。
// quick_sort.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include
#include
#include
using namespace std;
void show(int i)
//p指向陣列a的最左端,r指向最右端
int partition(vector
& a,int p,int r) void quick_sort(vector
& a, int p, int r)
//p指向陣列a的最左端,r指向最右端
int partition(vector
& a,int p,int r) //返回陣列a[p..r]中第i小的元素 int randomized_selsect(vector
& a,int p,int r,int i) void quick_sort(vector
& a, int p, int r) { int q; if(p
v(8); for(int i=0;i<8;i++) v[i]=a[i]; for_each(v.begin(),v.end(),show); cout<
求第k小元素的快速排序演算法
name 第k小元素 author date 13 04 17 15 28 description 求一列數中的第k小元素,利用分治的策略進行遞迴求解。模仿快速排序法的思路,只不過每次只遞迴處理第k小元素所在的序列。使用消除尾遞迴優化後效果更好。include include include inc...
快速排序 第K大 第K小的問題
這裡的快排 是一種稍微改進的快排,即減少一些不必要的交換次數。quick sort void quick sort int s,int e a s a i 此時 i j 為最後找到的最小的數,需要放在樞軸處 即位置s a i x quick sort s,i 1 quick sort i 1,e 第...
快速排序(求第k小的數)
快排是利用的partition演算法,基本思想是從第乙個數開始,利用partition演算法將這個數在有序序列中的位置找到,這個數的左邊部分都是小於它的數,右邊部分都是大於他的數,然後通過分治的方法對左右兩個區間再進行partition操作,partition演算法 如下 int partition...