首页 > 编程语言 >【算法】排序-归并排序 (java实现)

【算法】排序-归并排序 (java实现)

时间:2023-03-23 14:32:11浏览次数:50  
标签:归并 right java temp int arr mid 排序 left


 

package com.billkang.algorithm.sort;

import java.util.Arrays;

/**
 * 归并排序
 * @author Kangbin
 * @date 2018-11-28
 */
public class MergeSort {

    public void mergeSort(int[] arr) {
        //在排序前,先建好一个长度等于原数组长度的临时数组,避免递归中频繁开辟空间
        int[] temp = new int[arr.length];
        sort(arr, 0, arr.length - 1, temp);
    }

    public void sort(int[] arr, int left, int right, int[] temp) {
        if (left < right) {
            int mid = (left + right) / 2;
            sort(arr, left, mid, temp);
            sort(arr, mid + 1, right, temp);
            merge(arr, left, mid, right, temp);
        }
    }

    private void merge(int[] arr, int left, int mid, int right, int[] temp) {
        int i = left; //左序列指针
        int j = mid + 1; //右序列指针
        int t = 0; //临时数组指针
        while (i <= mid && j <= right) {
            if (arr[i] <= arr[j]) {
                temp[t++] = arr[i++];
            } else {
                temp[t++] = arr[j++];
            }
        }

        //左边剩余元素放进temp
        while (i <= mid) {
            temp[t++] = arr[i++];
        }

        //右边剩余元素放进temp
        while (j <= right) {
            temp[t++] = arr[j++];
        }

        //将temp中排好序的元素copy到原数组中
        t = 0;
        while (left <= right) {
            arr[left++] = temp[t++];
        }

    }

    public static void main(String[] args) {
        int[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1};
        new MergeSort().mergeSort(arr);
        System.out.println(Arrays.toString(arr));

    }
}

 

标签:归并,right,java,temp,int,arr,mid,排序,left
From: https://blog.51cto.com/u_6813689/6145010

相关文章

  • 【算法】判断一个字符串的所有字符是否全部不同 java代码实现
    packagecom.billkang.algorithm;importjava.util.HashSet;importjava.util.Set;/****@authorKangbin*@date2018-11-17*/publicclassUniqueChar{......
  • java之保留几位小数的几种方式及添加千位分隔符
    packagedecimal;importjava.math.BigDecimal;importjava.text.DecimalFormat;importjava.text.NumberFormat;/***java之保留几位小数的几种方式及添加千位分隔......
  • java rgb转hsv
    publicstaticdouble[]toHSV(intr,intg,intb){Colorcolor=newColor(r,g,b);float[]hsv=Color.RGBtoHSB(color.getRed(),color.getGre......
  • CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
    网上查应该是node导致的内存溢出,64位电脑默认1.4G,32位电脑默认0.7G在package.json中的Scripts中添加node的参数 "scripts":{  "serve":"node--max_old_s......
  • JAVA 数据类型,转换,变量,常量,命名规范
    数据类型拓展整数binary:0boctal:0hexadecimal:0x浮点数避免浮点数进行比较如果需要,用BigDecimal类字节字符的本质还是数值编码unicode2字节0-65536U......
  • Java初学者推荐学习书籍free下载
    场景Java是由SunMicrosystems公司于1995年5月推出的高级程序设计语言。Java可运行于多个平台,如Windows,MacOS,及其他多种UNIX版本的系统。Java分为三个体系:JavaSE(J2SE)(Jav......
  • 判断Javascript变量类型的函数
    toString本来是用来做字符串转换的,不过现在流行用来做变量类型的检查了。这里也的一个函数,方便检查变量的类型,可以用来代替typeof functiongetType(o){var_t;re......
  • Java开发:list列表元素遍历删除
    一、常见误区1、提前结束遍历(直接使用列表长度进行遍历)for(inti=0;i<list.size();i++){list.remove(i);}在list不断地删除元素的同时,总列表list的长......
  • 在mysql中分组和排序同时使用
    在mysql中,分组和排序同时使用时,需要注意配置中的sql_mode是否有only_full_group,如果运行在这个模式下,orderby语句中的字段,必须出现在groupby中,否则会提示错误Expressio......
  • javascript中的var,let,const区别
    const:这个最简单,只需记住是声明的常量,定义的时候必须声明const的具体值,且之后不允许改变const的值 var和let区别1、由于js引擎存在预解析,会把var变量名进行提升对于......