快速排序从小到大排序:在数组中随机选一个数(默认数组首个元素),数组中小于等于此数的放在左边,大于此数的放在右边,再对数组两边递归调用快速排序,重复这个过程。
动图描述:
#include <iostream>
using namespace std;
void quicksort(int a[], int left, int right);
//接口调整
void adjust_quicksort(int k[], int n)
{
quicksort(k, 0, n - 1);
}
void quicksort(int a[], int left, int right)// left 和right是数组下标
{
int i, j, t, temp;
if (left >= right) //(递归过程先写结束条件)
return;
temp = a[left]; //temp中存的就是基准数
i = left;
j = right;
while (i != j)
{
//顺序很重要,要先从右边开始找(最后交换基准时换过去的数要保证比基准小,因为基准
//选取数组第一个数,在小数堆中)
while (a[j] >= temp && i < j)
j--;
//再找右边的
while (a[i] <= temp && i < j)
i++;
//交换两个数在数组中的位置
if (i < j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
//最终将基准数归位 (之前已经temp=a[left]过了,交换只需要再进行两步)
a[left] = a[i];
a[i] = temp;
quicksort(a,left, i - 1);//继续处理左边的,这里是一个递归的过程
quicksort(a,i + 1, right);//继续处理右边的 ,这里是一个递归的过程
}
int main()
{
int array[] = { 0, 1, 8, 6, 3, 2, 5, 4, 7 };
adjust_quicksort(array, 9);
return 0;
}