ACM道路之一 基礎演算法(快速排序)

2022-09-12 19:33:15 字數 1192 閱讀 2123

快速排序(qsort) 本質是分治思想

排序的一次劃分演算法從兩頭交替搜尋,直到low和high重合,因此其時間複雜度是o(n);而整個快速排序演算法的時間複雜度與劃分的趟數有關。

快速排序三個步驟

1、確定區域,左邊界(l),右邊界(r),基準值(x = l+r>>2)

2、保證區間內,x左側的任意值小於x,x右側的任意值大於x

雙頭指標:i,j 分別從左邊界、右邊界向中間移動,下標為i的值大於x時,指標i停止移動,j同理

此時(i,j均停止移動,表明 q[i]>x&&q[j]給定你乙個長度為n的整數數列。

請你使用快速排序對這個數列按照從小到大進行排序。

並將排好序的數列按順序輸出。

輸入格式

輸入共兩行,第一行包含整數 n。

第二行包含 n 個整數(所有整數均在1~10

9'>109

109範圍內),表示整個數列。

輸出格式

輸出共一行,包含 n 個整數,表示排好序的數列。

資料範圍1≤

n≤100000

'>1≤n≤100000

1≤n≤100000

輸入樣例:

5

3 1 2 4 5

輸出樣例:
1 2 3 4 5
解法1:直接利用[algorithm]標頭檔案中的sort()函式完成排序

#includeusing

namespace

std;

const

int n = 1e6+10

;long

f[n];

intmain()

sort(f,f+n);

for(int i=0;i)

cout

<"";

}

解法2:

#includeusing

namespace

std;

const

int n= 100010

;int

n;int

q[n];

void quick_sort(int l,int

r) quick_sort(l,j);

quick_sort(j+1

,r);

}int

main()

排序演算法之一 快速排序

1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。1 預排序的輸入非常常見,因此不要選擇第乙個數作為基準數 2 隨機數的生成也較為昂貴 3 採用三數中值分割法 取左中右三個元素的中值作...

基礎演算法題複習之一 快速排序

先對排序演算法來個總結 其中不穩定的有 快,選,希,堆 時間複雜度為o nlogn 的有 快,歸,堆,其中後兩者的平均最好和最壞的時間複雜度都一樣,而快速排序的最差複雜度為o n 2 即初始排序為完全逆序的時候,所以快速排序的效能是會受到初始排序的影響的 即穩定時間複雜度又低的最優排序演算法應該是歸...

ACM 快速排序演算法

每次以陣列第乙個數為基數,從陣列兩端往中間找,小於基數的數放在陣列的左邊,大於它的數放在陣列的右邊,當i j的時候,查詢結束,將基數賦值到這個位置,這個數在陣列中的位置就是這個,確定了。然後從這個數的左邊和右邊開始遞迴,直到所有的數都排完序。時間複雜度 nlog2n 最好,平均 n2 最壞 incl...