千家信息网

Java归并排序和快速排序怎么实现

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"Java归并排序和快速排序怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!归并
千家信息网最后更新 2026年11月02日Java归并排序和快速排序怎么实现

本篇内容介绍了"Java归并排序和快速排序怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

归并排序

// 归并排序    public static void mergeSort (int[] arr) {        // 建一个临时数据来存放数据        int[] temp = new int[arr.length];        mergeSort(arr, 0, arr.length - 1, temp);    }    private static void mergeSort(int[] arr, int left, int right, int[] temp) {        if (left < right) { // 如果起始下标跟结束下标差值小于1,则不进行操作            int mid = (left + right) / 2;            mergeSort(arr, left, mid, temp); // 分组,将左边分为一组,递归调用进行排序            mergeSort(arr, mid+1, right, temp); // 将右边分为一组            merge(arr, left, mid, right, temp); //将左右分组合并        }    }    private static void merge(int[] arr, int left, int mid, int right, int[] temp) {        int i = left; // 定义左指针        int j = mid + 1; // 定义右指针        int t = 0; // 给temp临时数组用的指针        while (i <= mid && j <= right) { // 设置左右指针的移动边界            if (arr[i] <= arr[j]) { // 此处是升序,故谁小谁先赋给临时数组                temp[t++] = arr[i++];            } else {                temp[t++] = arr[j++];            }        }        while (i <= mid) { // 如果左边有剩余,则放在temp中            temp[t++] = arr[i++];        }        while (j <= right) { // 如果右边有剩余,依次放入temp中            temp[t++] = arr[j++];        }        t = 0;        // 此时temp中已经是arr数组中下标从left到right之间排好序的数据了,因为temp每次都是从0开始赋值,所以需将排好序的数放回arr的对应位置        while (left <= right) {            // 将left到right之间排好序的数据放回arr中,此时left到right之间的数就是最终排好序的数            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); // 将基准数右边排序    }

"Java归并排序和快速排序怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

排序 指针 位置 右边 基准 数据 数组 下标 之间 内容 情况 更多 知识 边界 j++ 分组 剩余 移动 实用 学有所成 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 智网互联网科技 互联网科技论文 美国互联网黑科技 北京禾田雨橡互联网科技 佰商互联网科技有限公司 欧洲十大科技互联网公司 银川新华互联网科技职业技术培训学校图片 福建科技产业互联网发展 消费医药和互联网科技 乌苏新华互联网科技做什么的 河南住房之家互联网科技 乌鲁木齐新华智原互联网科技学校 中科明德北京互联网科技 为客找房互联网科技公司怎么样 高科技互联网套路 伍佰万互联网科技怎么赚钱 浙南科技城互联网大厦招聘 美国五大互联网科技公司市值多少 三亚科技创新互联网基地 武汉亿视互联网科技有限公司 互联网科技公司官网 世界互联网领先科技成果 广州凡科互联网科技 甘肃拓世互联网科技有限公司 互联网企业和科技型企业 开一家科技互联网公司需要多少钱 亳州好赞互联网科技有限公司 深圳艾果互联网通讯科技 广西泛欧互联网科技有限公司 科技发展第三阶段互联网时代
0