C 演算法 快速排序

2021-10-02 19:39:42 字數 1001 閱讀 8807

基準數的選擇:採用範圍的中間位置的數

編譯環境: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 ...