時間複雜度: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...