快速排序(快排 遞迴實現)

2021-09-27 13:07:49 字數 952 閱讀 8421

時間複雜度:o(nlogn)

注意:(1)時間複雜度與pivot的選取有關,最好能選到正中間;

(2)該排序不是穩定排序

**1.0:不用swap函式(相較2.0節省時間)

int

qsort

(int l,

int r)

s[l]

= pivot;

return l;

}

**2.0:用swap函式
int

qsort

(int l,

int r)

//交換基準元素和其該到的位置

swap

(s[t]

, s[l]);

return l;

}

完整**參考:

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

#define max 5010

using

namespace std;

int s[max]

;int

qsort

(int l,

int r)

s[l]

= pivot;

return l;

}void

quicksort

(int l,

int r)

}void

print

(int n)

intmain()

quicksort(0

, n -1)

;print

(n);

return0;

}

演算法 快速排序 經典快排 隨機快排

經典快排的思路是選取陣列的最後乙個數 x,按照問題一的思路把整個陣列劃分成小於等於 x 大於 x兩個部分,將 x 和 大於 x 部分陣列的第乙個元素交換位置。此時整個陣列劃分成小於等於 x x 大於 x三個部分,也就是這一次排序將 x 值排好位置。再分別對小於等於 x和大於 x中的陣列遞迴劃分,直到...

快排非遞迴實現

int partition int arr,int low,int high arr low pivot return low void non recursive qsort int arr,int low,int high if high pivot 1 其實就是用棧儲存每乙個待排序子串的首尾元...

快速排序和變種快排

快速排序 假設我們現在要對乙個陣列ar進行排序。首先我們需要隨機選擇乙個基準值 一般選陣列的首元素 然後將陣列中的其他值與其進行比較,將小於它的數放在其左側,大於的放在右側 假定按從小到大排序 這就完成了一趟快速排序 原始資料如下 ar 0 ar 1 ar 2 ar 3 ar 4 ar 5 ar 6...