java实现快速排序
发布日期:2021-05-26 20:33:06 浏览次数:22 分类:精选文章

本文共 1124 字,大约阅读时间需要 3 分钟。

快速排序的基本思想

快速排序是一种高效的分治排序算法,其核心思想是通过一趟排序将数组分成两部分:一部分元素小于中轴值,另一部分元素大于中轴值,分别递归排序这两部分,直至整个数组有序。

分治法的步骤解释

把整个数组看作一组,选择中间的元素作为基准(通常选择第一个或最后一个元素)。

  • 如果当前基准元素大于右边的元素,交换它们的位置。
  • 如果当前基准元素小于左边的元素,交换它们的位置。
  • 如此反复循环,直到无法再进行交换。
  • 一趟排序完成后,左边的元素均小于基准,右边的元素均大于基准。
  • 再对左右两边的子数组分别递归排序。
  • 代码实现

    public int getMiddle(Integer[] list, int low, int high) {    int tmp = list[low]; // 选择左边第一个作为基准    while (low < high) {        while (low < high && list[high] > tmp) {            high--;        }        list[low] = list[high]; // 将右边小的移到左边        while (low < high && list[low] < tmp) {            low++;        }        list[high] = list[low]; // 将左边大的移到右边    }    list[low] = tmp; // 基准元素移到正确位置    return low;}public void _quickSort(Integer[] list, int low, int high) {    if (low < high) {        int middle = getMiddle(list, low, high); // 将数组分成两部分        _quickSort(list, low, middle - 1); // 对左边子数组递归排序        _quickSort(list, middle + 1, high); // 对右边子数组递归排序    }}

    测试用例与结果

    输入数组:34, 3, 53, 2, 23, 7, 14, 10排序结果:2, 3, 7, 10, 14, 23, 34, 53

    分治排序的工作原理

    通过不断地选择并交换元素,最终将较大的元素移到数组的一端,较小的元素移到另一端。每次选择的基准元素为中间元素,最终实现全数组的有序。这种方法的时间复杂度为O(n log n),在大多数情况下性能优于其他排序算法。

    上一篇:iOS开发 iPhone5 适配问题
    下一篇:java开发面试内幕

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年04月25日 22时27分44秒