基準數的選擇:採用範圍的中間位置的數
編譯環境:c++11
**實現如下:
#include // std::declval
typedef unsigned long size_type;
templateconstexpr size_type distance(const _tp &_1, const _tp &_2)
templatevoid swap(_tp &a1, _tp &a2)
templatestruct comparator
};/// 獲取範圍的基準數
/// 範圍:[@beg, @end) 範圍,須支援隨機迭代
template())>>
auto median(_randomiter beg,
_randomiter end,
_compare c = _compare())
-> decltype(*std::declval<_randomiter>())
if(c(*right, *left) > 0)
if(c(*right, *(left + center)) > 0)
swap(*(left + center), *(right - 1));
return *(right - 1);
}/// 快速排序
/// [@beg, @end) 待排序的範圍,同時儲存結果,須支援隨機迭代
template())>>
void qsort(_randomiter beg,
_randomiter end,
_compare c = _compare())
else break;
}swap(*(beg + i), *(beg + right - 1));
qsort(beg, beg + i, c);
qsort(beg + i + 1, end, c);
}
如有問題,歡迎指出! 排序演算法 快速排序 C
單向掃瞄就地重排 int partitation 1way int array,int nidxleft,int nidxright return nidxsmall 雙向掃瞄就地重排 int partitation 2way int array,int nidxleft,int nidxright...
快速排序演算法C
快速排序演算法 c 實現 評注版 經常看到有人在網上發快速排序的演算法,通常情況下這些人是在準備找工作,或者看 演算法導論 這本書,而在他們發布的 通常是差不多的版本,估計也是網上 copy 一下,自己改改,跑過了就算了,但是通常這樣玩根本沒有太大作用,如果到一家公司,給你一台不能上網的筆記本,20...
快速排序演算法(C)
sort快排函式的基本版,效率n logn,快排的完全版就是在遞迴之中夾雜對序列的預判斷,最優的選擇排序方法,快速排序演算法只是其中之一。簡單的說明一下快速排序的思想,對於乙個數列,首先選擇乙個基數 x 進行第一次排序,把比x 小的放在x左邊,大的放右邊 預設從小到大 例如 8 4 5 7 6 9 ...