快速排序是对冒泡排序的一种改进,它的基本思想是:通过一趟排序将要排序的部分分割成独立的两部分,其中一部分的数据比另一部分的数据都要小,然后对这两部分数据在快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
其实快速排序的核心思想就是分治法,分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。
代码实现:
/**
* 快速排序的递归实现
* @param numbers
* @param low
* @param high
*/
public static void quickSort(int[] numbers,int low,int high)
{
if(low < high)
{
int middle = getMiddle(numbers,low,high); //将numbers数组进行一分为二
quickSort(numbers, low, middle-1); //对低字段表进行递归排序
quickSort(numbers, middle+1, high); //对高字段表进行递归排序
}
}
/**
* 查找出中轴(默认是最低位low)的在numbers数组排序后所在位置
*
* @param numbers 带查找数组
* @param low 开始位置
* @param high 结束位置
* @return 中轴所在位置
*/
public static int getMiddle(int[] numbers, int low,int high)
{
int temp = numbers[low]; //数组的第一个作为中轴
while(low < high)
{
while(low < high && numbers[high] >= temp)
{
high--;
}
numbers[low] = numbers[high];//比中轴小的记录移到低端
while(low < high && numbers[low] <= temp)
{
low++;
}
numbers[high] = numbers[low] ; //比中轴大的记录移到高端
}
numbers[low] = temp ; //中轴记录到尾
return low ; // 返回中轴的位置
}
test:
int arr[] = {21,2,3,4,77,3,22,11,12,32,0};
Log.e("sort", Arrays.toString(arr));
quickSort(arr,0,10);
Log.e("sort", Arrays.toString(arr));