归并排序原理、演示及代码

归并排序

1.原理

归并排序是一种排序算法,它通过将待排序的数组或列表递归分割成较小的子数组,然后将这些子数组合并以生成一个有序的数组。

2.操作

  • 分割(Divide):将待排序的数组分成两个大致相等的子数组,或者将列表分成两部分。这个过程是递归的,直到每个子数组或子列表都只包含一个元素为止。
  • 合并(Merge):逐个合并两个有序的子数组(或子列表),以生成一个新的有序数组(或列表)。在合并过程中,通过比较两个子数组(或子列表)中的元素,将较小的元素放入新的有序数组(或列表),并继续这个过程,直到所有元素都合并为止。
  • 递归:重复上述分割和合并过程,直到整个数组(或列表)都被排序为止。

3.演示

先递归分割,再逐步合并

4.代码

 		/**
         * @param nums 待排序数组
         * @param low  数组的开始元素索引
         * @param high 数组的结束元素索引
         * @return 升序排列的数组
         */
        public int[] mergeSort(int[] nums, int low, int high) {
            if (high - low <= 0) {
                int[] ints = new int[1];
                ints[0]=nums[low];
                return ints;
            }
            int mid = (low + high) / 2;
            int[] leftNums = mergeSort(nums, low, mid);
            int[] rightNums = mergeSort(nums, mid+1, high);
            int[] res = new int[leftNums.length+rightNums.length];
            int li = 0, ri = 0, i = 0;
            while (ri < rightNums.length && li < leftNums.length) {
                if (leftNums[li] < rightNums[ri]) {
                    res[i] = leftNums[li];
                    li++;
                    i++;

                } else {
                    res[i] = rightNums[ri];
                    ri++;
                    i++;
                }
            }
            if (li == leftNums.length) {
                while(ri<rightNums.length){
                    res[i] = rightNums[ri];
                    ri++;
                    i++;
                }
            }else{
                while(li<leftNums.length){
                    res[i] = leftNums[li];
                    li++;
                    i++;
                }
            }
            return res;

        }
posted @   懒艾  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示