首页 > 其他分享 >归并排序

归并排序

时间:2023-03-10 20:33:07浏览次数:48  
标签:tempArr 归并 right nums int mid 排序 left

归并排序采用了分治的思想,以及递归的写法。

image
[图解来源:排序算法:归并排序【图解+代码】]

合并两个有序数组的示意图:
image
[图解来源:图解排序算法(四)之归并排序]

代码实现:

class Solution {
    public int[] sortArray(int[] nums) {
        int[] tempArr = new int[nums.length];
        mSort(nums, tempArr, 0, nums.length-1);
        return nums;
    }
    public void mSort(int[] nums, int[] tempArr,int left, int right){
        //如果只有一个元素就不需要划分
        if(left < right){
            int mid = (left+right)/2;
            //递归划分左半区
            mSort(nums, tempArr, left, mid);
            //递归划分右半区
            mSort(nums, tempArr, mid+1, right);
            //合并
            merge(nums, tempArr, left, mid, right);
        }
    }
    public void merge(int[] nums, int[] tempArr,int left, int mid, int right){
        int l_pos = left;//标记左半区第一个元素
        int r_pos = mid + 1;//标记右半区第一个元素
        int pos = left;//临时数组元素下标
        while(l_pos <= mid && r_pos <= right){
            if(nums[l_pos] < nums[r_pos]){
                tempArr[pos++] = nums[l_pos++];
            }else{
                tempArr[pos++] = nums[r_pos++];
            }
        }
        //合并左半区剩余元素
        while(l_pos <= mid){
            tempArr[pos++] = nums[l_pos++];
        }
        //合并右半区剩余元素
        while(r_pos <= right){
            tempArr[pos++] = nums[r_pos++];
        }
        while(left <= right){
            nums[left] = tempArr[left];
            left++;
        }
    }
}

标签:tempArr,归并,right,nums,int,mid,排序,left
From: https://www.cnblogs.com/zh-Note/p/17204601.html

相关文章

  • 【希尔排序ShellSort算法详解】Java/Go/Python/JS/C不同语言实现
    【希尔排序算法详解】Java/Go/Python/JS/C不同语言实现 说明希尔排序(ShellSort)是插入排序的一种改进版,也称递减增量排序算法(DiminishingIncrementSort),其实质是将数......
  • java学习日记20230310-排序
    排序 指将一组数据按照指定的顺序排列的过程分类:内部排序:指将需要处理的所有数据都加载到内存储存器中,进行排序,包括交换排序法,选择排序法,插入排序法外部排序:......
  • 拓扑排序
      拓扑排序的核心就是找入度为零的点,然后把于该点相连接的边去掉,同时更新剩余点的入度,由于n可能很大,需要邻接表,(这里用vector模拟),也可以学习链式向前星。点击查看代......
  • React+antd sorter实现排序并作汉化处理
    sorter实现排序sorter排序大致分为两种:第一种是数值类型:直接相加减就好第二种是字符串类型:需要用到 localeCompare方法 废话不多说,直接上代码     ......
  • es嵌套排序
    NestedSortBuildernestedSort=newNestedSortBuilder("tenantIdList");nestedSort.setFilter(QueryBuilders.nestedQuery(StringUtils.came......
  • 算法基础课笔记:第一章,基础算法 排序 + 二分
    这节课的内容排序快排归并排序二分整数二分浮点数二分如何提高自己敲模板的熟练度呢?反复的练,孰能生巧。重复3-5次。快排1.确定分界点2.调整区......
  • MySQL数据库如何在SQL语句中显式的使用排序规则?
    大家都知道,MySQL数据库在SQL语句中都是使用ORDERBY子句来进行排序,可以使用ASC或DESC关键字来指定排序的方式,即升序或降序。那如果要在排序时指定特定的排序规则,该怎么写......
  • MySQL如何指定字符集和排序规则?
    在MySQL中,可以使用以下两种方式指定字符集和排序规则:创建数据库或表时指定字符集和排序规则在创建数据库或表时,可以使用CHARACTERSET和COLLATE选项......
  • (2.7)简单插入排序
    文章目录​​1.插入排序的思想​​​​2.插入排序的三步曲​​​​3.直接插入排序​​​​4.插入排序的本质​​1.插入排序的思想基本思想:将无序子序列中的一个或几个记录......
  • (2.7)希尔排序
    文章目录​​1.希尔排序(缩小增量法)​​​​2.排序过程​​​​3.最坏复杂度分析​​1.希尔排序(缩小增量法)基本思想:分割成若干个较小的子文件,对各个子文件分别进行直接......