快速排序(Quick Sort)是对起泡排序的一种改进。它的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。快速排序的平均时间复杂度为Knln(n)
首先拿到枢轴位置,然后对低于枢轴位置的序列进行分区(也是排序的一个过程),再对高于枢轴位置的序列进行同样的操作。
将第一个小于枢纽的记录复制到low位置,此时还位置的记录已经被记录在privotkey中或者是复制到上一个high位置了\\将第一个小于枢纽的记录复制到low位置,此时还位置的记录已经被记录在privotkey中或者是复制到上一个high位置了
\\将顺序表进行拆分
template <typename T>
int partition(vector<T>& array,int low,int high)
{
T privotkey = array[low];\\每次讲第一个记录作为枢纽位置
while (low < high)
{
while (low < high && array[high] > privotkey)
high--;
array[low] = array[high];\\将第一个小于枢纽的记录复制到low位置,此时该位置的记录已经被记录在privotkey中或者是复制到上一个high位置了
while (low < high && array[low] < privotkey)
low++;
array[high] = array[low];\\将第一个大于枢纽的记录复制到high位置,此时该位置记录已经被复制到前一个low位置了
}
array[low] = privotkey;\\将作为枢纽元素的记录复制到正确的位置
return low;
}
\\递归调用进行排序
template <typename T>
void quick_sort(vector<T>& array,int low,int high)
{
if (low < high)
{
int privotloc = partition(array,low,high);
quick_sort(array,low,privotloc-1);
quick_sort(array,privotloc+1,high);
}
}
template <typename T>
void quickSort(vector<T>& array,const int length)
{
int low = 0,high = length - 1;
quick_sort(array,low,high);
}