快速排序是 C.R.A.Hoare 于 1962 年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法。
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
void fast_sort(int* arr,int left,int right)
{
if (left < right)
{
int i = left, j = right, x = arr[i];//将第一个数作为基准数(可以随意选择)
if (i < j)
{
while(i < j && arr[j] >= x)//从右边找到第一个小于x的值
j--;
if(i < j)
arr[i++] = arr[j];//找到之后,将其值放在i位置上 i++
while(i< j && arr[i] < x)//从左边找到第一个大于x的值
i++;
if(i < j)
arr[j--] = arr[i];//找到之后,将其值放在j位置上,j++
}
arr[i] = x;//第一次排好序的数及位置
fast_sort(arr,left,i-1);//递归,在x的左边区域范围内重复相同的操作
fast_sort(arr,i+1,right);//递归,在x的右边区域范围内重复相同的操作
}
}