1、快速排序
是指选取最左的一个数为pivot(枢轴),然后从最左的下一个开始遍历一个大于pivot的数,在从最右的开始遍历一个比pivot小的数,最后再将二者交换,直至左边的迭代大于或等于右边的迭代,最后将最左的数与中间的交换。再对左半边和有半边进行递归。
快速排序是属于高级排序,比选择、插入排序要快很多。
2、快速排序demo
#include <iostream>
using namespace std;
const int n = 5;
template <class T>
void quickSort(T *data, int left, int right);
int main(int argc, const char *argv[])
{
int data[n+1] = {2, 5, 1, 3, 4, 99}; //最后一个数不纳入计算范围
quickSort(data, 0, n);
for (int i = 0; i < n; i++){
cout << data[i] << " ";
}
return 0;
}
template <class T>
void quickSort(T *data, int left, int right)
{
if (left < right){
/* 选枢轴 */
int i = left;
int j = right + 1; //为了使算法更加简便,数组最后一个数不纳入计算范围
T pivot = data[left]; //选取最左边为枢轴
/* 划分算法 */
do {
do i++; while (data[i] < pivot);
do j--; while (data[j] > pivot);
if (i < j)
swap(data[i], data[j]);
}while (i < j);
swap(data[left], data[j]);
/* 递归 */
quickSort(data, left, j-1);
quickSort(data, j+1, right);
}
}