千家信息网

Java的堆排序、快速排序、归并排序怎么实现

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文小编为大家详细介绍"Java的堆排序、快速排序、归并排序怎么实现",内容详细,步骤清晰,细节处理妥当,希望这篇"Java的堆排序、快速排序、归并排序怎么实现"文章能帮助大家解决疑惑,下面跟着小编的
千家信息网最后更新 2026年11月01日Java的堆排序、快速排序、归并排序怎么实现

本文小编为大家详细介绍"Java的堆排序、快速排序、归并排序怎么实现",内容详细,步骤清晰,细节处理妥当,希望这篇"Java的堆排序、快速排序、归并排序怎么实现"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

堆排序

  • 时间复杂度:0(N*log(N))

  • 空间复杂度:0(1)

  • 稳定性:不稳定

private static void heapSort(int[] arr) {                //建堆        crearHeap(arr);        for (int i = 0; i < arr.length-1; i++) {            int heapSize=arr.length-i;            swap(arr,heapSize-1,0);            heapSize--;            shiftDown(arr,heapSize,0);        }        System.out.println(Arrays.toString(arr));    }    private static void crearHeap(int[] arr) {            // 从后往前遍历(右边非叶子节点开始), 依次进行向下调整        for (int i = (arr.length-1-1)/2; i >=0 ; i--) {            shiftDown(arr,arr.length,i);        }            }        //向下调整,形成大堆    private static void shiftDown(int[] arr, int size, int i) {        int parent = i;        int child = parent*2+1;        while (child arr[child]){                child=child+1;            }            if (arr[child]>arr[parent]){                swap(arr,child,parent);            }else {                break;            }            parent=child;            child=parent*2+1;        }    }        //交换    private static void swap(int[] arr, int child, int parent) {        int tmp =arr[child];        arr[child] =arr[parent];        arr[parent]=tmp;    }

快速排序

  • 时间复杂度:O(N^ logN) 最坏的时候O(N^2) 和基准值密切相关

  • 空间复杂度:0(logN) 最坏的时候O(N)

  • 稳定性:不稳定

递归

private static void quick(int[] arr) {        quickSortHelper(arr,0,arr.length-1);        System.out.println(Arrays.toString(arr));    }    private static void quickSortHelper(int[] arr, int left, int right) {        if (left>=right){            //区间只有一个元素,或者零个元素            return;        }        int index = partition(arr,left,right);        quickSortHelper(arr,left,index-1);        quickSortHelper(arr,index+1,right);    }    private static int partition(int[] arr, int left, int right) {        int i=left;        int j=right;        int baseValue=arr[right];        while (i=baseValue){                j--;            }            if (i

非递归

public static void quickSortByLoop(int[] arr) {        Stack stack =new Stack<>();        stack.push(0);        stack.push(arr.length-1);        while (!stack.isEmpty()){            int right = stack.pop();            int left = stack.pop();            if (left>=right){                continue;            }            int index = partition(arr,left,right);            //右子树            stack.push(index+1);            stack.push(right);            //左子树            stack.push(left);            stack.push(index-1);        }        System.out.println(Arrays.toString(arr));    }    private static int partition(int[] arr, int left, int right) {        int baseValue =arr[right];        int i =left;        int j =right;        while (i=baseValue){                j--;            }            if (i

归并排序

  • 时间复杂度:O(NlogN)

  • 空间复杂度:O(N) 如果是链表,可以为O(1)

  • 稳定性:稳定

递归

public static void mergeSort(int[] arr){        mergeSortHelper(arr,0,arr.length);        System.out.println(Arrays.toString(arr));    }    private static void mergeSortHelper(int[] arr, int left, int right) {        if (right-left<=1){            return;        }        int mid = (right+left)/2;        mergeSortHelper(arr,left,mid);        mergeSortHelper(arr,mid,right);        merge(arr,left,mid,right);    }    private static void merge(int[] arr, int left, int mid, int right) {        int cur1 =left;        int cur2 =mid;        //两个数组合并后的结果        int[] output=new int[right-left];        int outputIndex=0;        while (cur1

非递归

public static void mergeSortByLoop(int[] arr){        // gap 当前每个组中的元素个数.        for (int gap =1;gap arr.length){                    mid =arr.length;                }                if (right>arr.length){                    right=arr.length;                }                merge(arr,left,mid,right);            }        }        System.out.println(Arrays.toString(arr));    }

读到这里,这篇"Java的堆排序、快速排序、归并排序怎么实现"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

排序 复杂 复杂度 递归 元素 文章 时间 稳定性 空间 内容 时候 子树 妥当 两个 个数 区间 只有 基准 基准值 大堆 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网扶贫科技 科技与互联网发展 互联网 卓越科技 互联网科技小额贷款 上游互联网科技 四个字互联网科技公司取名 顺网科技2021年互联网排名 上海电发互联网科技有限公司 互联网科技产品 互联网之后的科技是什么 搜狐科技互联网 速维有品互联网信息科技(苏州)有限公司 洛阳昕诺飞互联网科技有限公司 健康食品互联网创新科技园项目 银川新华互联网科技学校联系电话 乌苏新华互联网科技做什么的 黑云互联网科技有限公司 互联网时代科技型公司的机会 上海互联网科技园景观 科技发展第三阶段互联网时代 互联网科技公司简介 广东猪兼强互联网科技有限公司 工业互联网科技新基建 互联网科技与金融科技 顺网科技2021年互联网排名 深圳互联网科技怎么样 宁夏众和广鑫互联网科技有限公司 成都互联网科技公司工作好不好 江苏互联网科技小贷 重庆科技产业互联网有哪些
0