快速排序

快速排序:和归并排序类似,也是分区递归排序,区别是,归并排序先分区,在排序合并,快排是,先抽取point,排序,分区,在抽point,point是要排序数组里的一个数,我直接抽第一个,把大于point的数放左边,小于point的数放右边,在吧point置换进去

public class Client {
    public static void main(String[] args) {
        int result[] = new int[]{5, 1, 10, 20, 31, 9, 7, 5, 0, 12, 3};
        sortArray(result, 0, result.length - 1);
        for (int value : result) {
            System.out.println(value);
        }
    }
<pre><code>public static void sortArray(int[] nums, int start, int end) {
    if (start &gt;= end)
        return;
    int point = nums[start];
    int start1 = start;
    int end1 = end;

    while (start1 &lt; end1) {

        while (nums[end1] &lt;= point &amp;&amp; start1 &lt; end1) {
            end1--;
        }

        while (nums[start1] &gt;= point &amp;&amp; start1 &lt; end1) {
            start1++;
        }

        if (start1 &gt; end1) {
            break;
        }

        int tem = nums[start1];
        nums[start1] = nums[end1];
        nums[end1] = tem;
    }

    nums[start] = nums[start1];
    nums[start1] = point;

    sortArray(nums, start, start1 - 1);
    sortArray(nums, start1 + 1, end);
}

}

记得排序时候一定要先从右边数过来,这样的start1,才是我们可以置换的位置

参考链接

https://zhuanlan.zhihu.com/p/64659156