快速排序

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。

步骤为:

挑选基准值:从数列中挑出一个元素,称为"基准"(pivot);
分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成;
递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序。
递归到最底部的判断条件是数列的大小是零或一,此时该数列显然已经有序。

选取基准值有数种具体方法,此选取方法对排序的时间性能有决定性影响。


quickSort.gif
public class Quick {
    public static void main(String[] args) {
        int[] arr={8,4,5,7,1,3,6};//直接复制数组
        quick_sort(arr,0,arr.length-1);    
        print(arr);
    }
    private static int get_mid(int arr[],int left,int right){
        int pivot=arr[left];//自定义排序中心轴,这里把arr[left]存到pivot中去,此时arr[left]为空。pivot相当于一个中间量
        while(left=pivot && left=pivot,即满足以pivot为中轴,小放左,大放右的条件时,right指针继续往右遍历。当arr[right]pivot的时候,把当前值arr[left]赋给空置arr[right],此时arr[left]成了空值。
                 arr[right]=arr[left];
        }
        //经历了上面的循环实现了pivot为中轴,小放左,大放右的格局
        arr[left]=pivot;//最后把存放在pivot值放回数组空arr[left]中
        return left;//返回中轴所在的下标位置。
    }
    
    private static void  quick_sort(int[] arr,int left,int right){
        if(left

你可能感兴趣的:(快速排序)