首页 笔记 图片 查字 
所属分类:Java
浏览:21
内容:

要点:
base数值:每次从数组left位置选择。
一次切分:小于base则  l++,大于base则  r--,l 停在左边 >base 的数值位置上,r 停在右边 <base 的数值位置上,然后交换 l 和 r 的数值,再进行上面一步的判断和移动,直到 l = r ,这个位置就是切分位置。
左右各自切分和排序:递归调用进行左右各自的切分和排序。

代码:

public class QuickSort {
    public static void main(String[] args) {
        int[] arr = {6, 1, 7, 3, 9, 22, 46, 0, 8};
        qs(arr, 0, arr.length - 1);

        for(int i:arr){
            System.out.print(i + " ");
        }
    }

    static void qs(int[] arr, int l, int r) {
        if (l > r) {
            return;
        }

        int b = arr[l];
        int i = l;
        int j = r;

        while (i != j) {
            while (arr[j] >= b && i < j) {
                j--;
            }

            while (arr[i] <= b && i < j) {
                i++;
            }

            int t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }

        arr[l] = arr[i];
        arr[i] = b;

        qs(arr, l, i - 1);
        qs(arr, i + 1, r);
    }
}