快速排序方法思路是:每次使用第一个元素作为分割线,然后对后面的元素进行分割。然后再对分割的两段(左边和右边)再重复之前的方式,选择两小段的第一个元素进行分割,不断迭代,直到完全排序。
本文在上述思路下利用stl中的list作为容器,用到了list的splice分割,和算法中的partion
算法的实现如下:
template<typename T>
std::list<T> quicksort(std::list<T> result)
{
std::list<T> listInt;
listInt.splice(listInt.end(), result, result.begin());
auto begin = listInt.begin();
auto divide_pt = std::partition(result.begin(), result.end(), [&](const T& s) {return s < *begin; });
std::list<T> lowerPart(result.begin(), divide_pt);
std::list<T> reSortLowerPart;
if (lowerPart.size() > 1)
{
reSortLowerPart = quicksort(lowerPart);
}
else
{
reSortLowerPart = lowerPart;
}
std::list<T> higherPart(divide_pt, result.end());
std::list<T> reSortHigherPart;
if (higherPart.size() > 1)
{
reSortHigherPart = quicksort(higherPart);
}
else
{
reSortHigherPart = higherPart;
}
listInt.splice(listInt.begin(), reSortLowerPart);
listInt.splice(listInt.end(), reSortHigherPart);
return listInt;
}