快速排序

快速排序

松懈了,仅有的一个周日打了一下午游戏…

上图,大致描述递归实现快速排序思路

代码截图

public class QuickSort {

    public static void main(String[] args) {
        int[] arr=new int[] {4,6,8,1,3,2,4,7,9,3};
        quickSort(arr, 0, arr.length-1);
        System.err.println(Arrays.toString(arr));
    }
    public static void quickSort(int[] arr,int start,int end) {
        //起始位要小于终止位,也就是说最少两个数才能一轮进行比较
        if(start<end) {
            //记录基准数(每轮数据的第一个数)
            int mark=arr[start];
            //最低位
            int low=start;
            //最高位
            int high=end;
            while(low<high) {
                //高位的值大于基准数时,高位减一,否则高位的值赋给低位
                while(low<high&&mark<=arr[high]) {
                    high--;
                }
                arr[low]=arr[high];
                //低位的值小于基准数时,低位加一,否则低位的值赋给高位
                while(low<high&&mark>=arr[low]) {
                    low++;
                }
                arr[high]=arr[low];
            }
            //一轮比较完成后,把基准数赋给高位、低位重合的位置
            arr[low]=mark;
            //继续比较start到低位low
            quickSort(arr, start, low);
            //继续比较low+1到高位
            quickSort(arr, low+1, end);
        }
    }
}