Loading

Java 快速排序

思路

通过一趟排序将无序数组划分成独立的两部分,其中一部分的所有元素比另外一部分的所有元素都要小,然后再按此方法对这两部分元素分别进行快速排序,整个排序过程可以递归进行,以此达到整个无序数组变成有序数组的目的。

快速排序主要分为以下步骤:

  1. 从无序数组中取出一个元素作为基准元素;

  2. 划分数组过程中,将比基准元素大的元素全部划分到它的右边,小于或等于它的元素全部划分到它的左边;

  3. 重复步骤(1)和(2),直到各划分数组的长度为1。

代码

    public void sort(int[] arr, int low, int high) {
        int i = 0, j = 0, k = 0;
        if (low < high) {
            i = low;
            j = high;
            k = arr[i];
            while (i < j) {
                // 从右向左找第一个小于arr[i]的元素
                while (i < j && arr[j] > k) {
                    j--;
                }
                if (i < j) {
                    arr[i++] = arr[j];
                }
                // 从左向右找第一个大于arr[i]的元素
                while (i < j && arr[i] <= k) {
                    i++;
                }
                if (i < j) {
                    arr[j--] = arr[i];
                }
            }
            arr[i] = k;
        }
        sort(arr, low, i - 1);
        sort(arr, i + 1, high);
    }
posted @ 2023-09-04 11:05  星流残阳  阅读(26)  评论(0编辑  收藏  举报