快速排序
算法步骤
-
从数列中挑出一个元素,称为 “基准”(pivot);
-
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
-
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;
代码示例
public static int partition(int []arr,int left, int right){
int key = arr[left]; //设置基准值
while(left<right){
while (arr[right]>=key&&right>left){ //从后往前找
right--;
}
arr[left] =arr[right];
while (arr[left]<=key&&right>left){ // 从前往后找
left++;
}
arr[right]=arr[left];
}
arr[right] =key;
return right; //返回下一次的基准值
}
public static int[] quickSort(int [] arr,int left,int right){
if(left>=right){
return arr;
}
int index= partition(arr,left,right);
quickSort(arr,left,index-1);
quickSort(arr,index+1,right);
return arr;
}