最近在看算法導論,第七章講的是快排算法。
本篇文章使用c++來實現:
書中的僞代碼如下:
快排的核心思想是找出一個分割數組的元素,在小於該元素的數組索引對應的元素值小於該值,在大於該元素的索引的數組元素大於該值。當然等於也是可以的。本文是跟書中一致,選擇數組中最後一個元素作爲對比對象。
代碼如下:
template<typename T>
void exchange(T& l, T& r)
{
T tmp = l;
l = r;
r = tmp;
}
template <typename T>
size_t partition(vector<T>& input, int p, int r)
{
T x = input[r];
int i = p - 1;
for (int j = p; j < r ; j++)
{
if (input[j] <= x)
{
i++;
exchange<T>(input[i], input[j]);
}
}
exchange<T>(input[i+1], input[r]);
return i + 1;
}
template <typename T>
void quick_sort(vector<T> &input, int p, int r)
{
if (p < r)
{
if (r == (p + 1))
{
if (input[p] > input[r])
exchange(input[p], input[r]);
}
else
{
int q = partition(input, p, r);
quick_sort<T>(input, p, q - 1);
quick_sort<T>(input, q + 1, r);
}
}
}