排序 快速排序
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序 快速排序相关的知识,希望对你有一定的参考价值。
1. 思想
step1. 从数列中挑出一个元素,称为 “基准”(pivot)。
step2. 分区(partition):重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。
step3. 递归地(recursive)把基准值左边的子数列和右边的子数列排序。
1.1 具体实现
step1. 以最左边为基准值,将a[low]作为pivot
step2. j值开始是low+1,i从j开始循环,将j指向当前第一个比pivot大的值,如果发现数组中有一个比pivot小,就将a[i]与a[j]替换
step3. 循环结束,此时a[low]是pivot,a[low+1]到a[j-1]的值都小于pivot,j右边的值都大于pivot。将a[low]与a[j-1]互换
void swap(int& a, int& b)
int t = a;
a = b;
b = t;
int partition(int arr[], int low, int high)
int pivot = arr[low]; // pivot
int j = low+1; // Index of smaller element and indicates the right position of pivot found so far
for (int i = j; i <= high; i++)
// If current element is smaller than the pivot
if (arr[i] < pivot)
swap(arr[j], arr[i]);
j++; // increment index of smaller element
swap(arr[j-1], arr[low]);
return (j-1);
void quickSort(int A[], int low, int high) //快排母函数
if (low < high)
int pivot = partition(A, low, high);
quickSort(A, low, pivot - 1);
quickSort(A, pivot + 1, high);
void test()
int a[] = 1, 4, 5, 2, 10, 8 ;
int nSize = sizeof(a) / sizeof(int);
quickSort(a, 0, nSize-1);
eg.
数组: 4 2 5 3 10
pivot: 4
开始:
4 2 5 3 10
j
->
4 2 5 3 10
j
->
4 2 3 5 10
j
循环结束:再将a[low] 与a[j-1]互换->
3 2 4 5 10
以上是关于排序 快速排序的主要内容,如果未能解决你的问题,请参考以下文章