快速排序是一种分治法的排序,与归并排序是互补的。
归并排序是将序列分成子序列,将有序的子序列归并为整个序列。
而快速排序则是当子序列都有序的时候,整个数组自然就有序了。
template<typename T>
class sort
{
public:
void quick_sort(std::vector<T> &item,int low,int high)
{
if (high <= low)
return;
int j = partition(item, low, high);
quick_sort(item, low, j - 1);
quick_sort(item, j + 1, high);
}
private:
int partition(std::vector<T> &a, int low, int high)
{
int i = low, j = high + 1;
T v = a[low];
while (true)
{
while (less(a[++i], v))
{
if (i == high)
break;
}
while (less(v,a[--j]))
{
if (j == low)
break;
}
if (i >= j)
break;
swap(a, i, j);
}
swap(a, low, j);
return j;
}
void swap(std::vector<T> &a, int i, int j)
{
T temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
运行结果:
简而言之,快速排序就是运用递归的方法,不断对序列进行切分(以一个数为基准,大于它的与小于它的分离)
因为快速排序的时空复杂度度都与NlogN成正比,所以快速排序可能是应用最广泛的排序算法