Java Arrays合并排序算法的实现

下面再来看看Arrays里面的合并排序算法实现。先把完整的源代码贴过来看看

 

 

public static void sort(Object[] a, int fromIndex, int toIndex) {
        rangeCheck(a.length, fromIndex, toIndex);
	Object[] aux = copyOfRange(a, fromIndex, toIndex);
        mergeSort(aux, a, fromIndex, toIndex, -fromIndex);
    }   
 private static void mergeSort(Object[] src,
				  Object[] dest,
				  int low,
				  int high,
				  int off) {
	int length = high - low;

	// Insertion sort on smallest arrays
        if (length < INSERTIONSORT_THRESHOLD/*=7*/) {
            for (int i=low; i<high; i++)
                for (int j=i; j>low &&
			 ((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
                    swap(dest, j, j-1);
            return;
        }

        // Recursively sort halves of dest into src
        int destLow  = low;
        int destHigh = high;
        low  += off;
        high += off;
        int mid = (low + high) >>> 1;
        mergeSort(dest, src, low, mid, -off);
        mergeSort(dest, src, mid, high, -off);

        // If list is already sorted, just copy from src to dest.  This is an
        // optimization that results in faster sorts for nearly ordered lists.
        if (((Comparable)src[mid-1]).compareTo(src[mid]) <= 0) {
            System.arraycopy(src, low, dest, destLow, length);
            return;
        }

        // Merge sorted halves (now in src) into dest
        for(int i = destLow, p = low, q = mid; i < destHigh; i++) {
            if (q >= high || p < mid && ((Comparable)src[p]).compareTo(src[q])<=0)
                dest[i] = src[p++];
            else
                dest[i] = src[q++];
        }
    }

 

 

 

 

Java 连接合并两个数组(Array)的五种方法 5、使用 ArrayUtils.addAll (需要 Apache Commons Lang 库)2、使用 Arrays.copyOf 和 System.arraycopy。Java 中,有多种方法可以连接和合并两个数组。3、使用 Stream.concat (Java 8 及以上)1、使用 System.arraycopy。4、使用 List 和 toArray 阅读详情

相关推荐

Java合并数组的两种实现方式

最近在写代码时遇到了需要合并两个数组的需求,突然发现以前没用过,于是研究了一下合并数组的方式,总结如下。 1.System.arraycopy()方法 (1) 解析 通过阅读JDK源码,我可以知道方法原型如下: public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, in...

一亩三分地 7万+

Java合并两个数组的4种方法(How to Merge Two Arrays in Java)

Java合并两个数组的4种方法(How to Merge Two Arrays in Java)

weixin_45428910的博客 5881

听说全部看懂Arrays.sort的都被面试官录取了

解析源码我们来回顾一下Arrays.sort()的基础知识点:1.可以直接排的基本数据类型是:int,long,short,char,byte,floa...

zhupanlinch的博客 1168

JAVA两个数组合并为一个数组并升序排序

package zlm; import java.util.Arrays; public class MergeList { public static void main(String args[]) { int a[] = { 1, 2, 6 }; int b[] = { 7, 3, 3 }; int c[] = new int[a.length + b.length]; System.arraycopy(a, 0, c, 0, a.length); System.arraycop

苦涩精灵的博客 7140

图解排序算法(四)之归并排序

基本思想   归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 分而治之   可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。 合并相邻有序子序列   再来看看.

u011220840的博客 536

Java】排序之JavaSort函数

排序之Java中的Sort函数 javaArrays.sort使用了两种排序方法,快速排序和优化的合并排序。 快速排序主要是对哪些基本类型数据(int,short,long等)排序。 而合并排序用于对对象类型进行排序。 原因: 使用不同类型的排序算法主要是由于快速排序是不稳定的,而合并排序是稳定的。这里的稳定是指比较相等的数据在排序之后仍然按照排序之前的前后顺序

renxingzhadan的专栏 723

java实现归并排序

基本思想   归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 分而治之   可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式...

qfc8930858的博客 199

LeetCode 寻找两个正序数组的中位数 题解

寻找两个正序数组的中位数

nannian123的博客 441

Array.sort()内部使用的排序方法

javaArrays.sort使用了两种排序方法,快速排序和优化的合并排序。 即基本类型数据(如int,short,long等)排序,合并排序用于对对象类型进行排序。

天涯流浪人的专栏 1380

先码后看 Collection的sort方法 侵立删

Java中如果需要对一个collections排序,需要继承于Comparable或者comparator接口,那么使用的排序算法是什么呢,一般情况下,排序算法包括:插入排序、快速排序、合并排序、冒泡排序等,java的Collections.sort算法调用的是合并排序,它是稳定排序,当数据接近有序的时候,效率更高,collections中的数据在排序前需要输入到array中,接着调用Arrays

心神沫沫的收藏 459

算法部分:利用Comparator排序

今天学刷算法题的时候学会一个排序方法 似乎以前是学过的但我可能忘掉了 重新记录一下 先上代码 class Solution { public int[][] merge(int[][] intervals) { if (intervals.length == 0) { return new int[0][2]; } Arrays.sort(intervals, new Comparator<int[]>() {

qq_45100750的博客 317

【JDK优化】java.util.Arrays的排序研究

java.uti.Arrays】 包含用来操作数组(比如排序和搜索)的各种方法。这篇文章我们就来研究一些大师们写的排序算法。 (1) 基本数据类型数组的排序,如Arrays.sort(int[])等。采用了一种经 过调优的快速排序 。 该算法改编自 Jon L. Bentley 和 M. Douglas McIlroy 合著的 Engineering a Sort Function", S...

沙漠之鹰 192

java - day004 - 数组排序,插入,冒泡

// 判断string 是否相等不能用 == 使用 equal 方法 Arrays.sort(数组); 数组排序算法 对基本类型. 优化的快速排序算法 对引用类型, 优化的合并排序算法 转载于:https://www.cnblogs.com/dingzhijie/p/10693839.html...

weixin_33725239的博客 122

排序算法之归并排序

归并排序 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。 合并相邻有序子序列 再来看看治阶段,我们需要将两个已经

Reborn_inuyasha的博客 268

java sort原理,Collections.sort() 的实现原理

package com.java.collections.demo;import java.util.Arrays;import java.util.Collections;import java.util.List;public class Ctest01 {public static void main(String[] args) {List list = Arrays.asList("6"...

weixin_31653131的博客 236

leetcode-java 合并两个有序数组

合并两个有序数组 题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0],...

baobaohui 586

归并排序

归并排序 package algorithm; import java.util.Arrays; public class MergeSort { private static int[] a={0,2,0,0,0,-1,0,0,0,0,0,-1}; public static void mergeArray(int left,int right){ if(left>right)

mym13088975036的专栏 235
上一篇: Java Arrays 快速排序算法的实现
下一篇: Java hashMap的 Hash函数
jbm3072
博客等级 码龄14年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值