设为首页 加入收藏

TOP

算法之常见排序算法-冒泡排序、归并排序、快速排序(二)
2019-09-03 03:40:03 】 浏览:132
Tags:算法 常见 排序 冒泡 归并 快速
;       arr[left++] = temp[t++];
        }
    }


快速排序


// 快速排序
    public static void quickSort (int[] arr, int left, int right) {
        // 先将异常情况处理掉
        if (arr == null || arr.length < 2) {
            return;
        }
        if (right <= left) {
            return;
        }
        if (right - left == 1 && arr[left] <= arr[right]) {
            return;
        }
        // 取第一个数为基准数(基数取哪个都行,此处是为了方便)
        int index = arr[left];
        int i = left + 1; // 左指针
        int j = right; // 右指针
        while (i < j && i < right && j > left) { // 设置指针的移动边界
            while (arr[j] > index && j > left) {j--;} // 找到从右边数第一个比index小的数
            while (arr[i] < index && i < right) {i++;} // 找到从左边数第一个比index大的数
            if (i < j) { // 交换这两个数  如果i == j,说明二者定位到了同一个位置,则不用交换;如果i > j,说明二者已经相遇然后背向而行了,也不交换
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        // 执行完上面循环后,arr已经是左边比index小,右边比index大的数组了,只是基准数仍在基准位置left处,需放到它应该在的位置
        if (j != left && arr[j] != arr[left]) {
            // j最后停留位置的数,肯定是一个小于等于index的值,所以如果不是同一个位置的话,直接将二者调换一下位置即可
            int temp = arr[j];
            arr[j] = arr[left];
            arr[left] = temp;
        }
        quickSort(arr, left, j-1); // 将基准数左边排序
        quickSort(arr, j+1, right); // 将基准数右边排序
    }


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java线程的中断 下一篇JavaScript在Web自动化测试中的作..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目