Java实现归并排序

简介: Java实现归并排序

归并是将两个或多个存序记录序列合并成一个有序序列。归并方法有多种,一次对两个有序记录序列进行归并,称为路归并排序,也有三路归并排序及多路归并排序。本实例是二路归并排序,基本方法如下:

(1) 将 n 个记录看成是 n 个长度为 1 的有序子表。

(2) 将两两相邻时有序无表进行归并。

(3) 重复执行步骤 (2) 直到归并成一个长度为 n 的有序表。

源码

package com;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
    Scanner s=new Scanner (System.in);
    int n=s.nextInt();
    int [] a=new int [n];
    int [] temp=new int [n];
    for(int i=0;i<n;i++)
      a[i]=(int)(Math.random()*100);
    mergesort(a,0,a.length-1,temp);
    System.out.println(Arrays.toString(a));
  }
  public static void mergesort (int[] a,int left,int right,int[] temp) {
    if(left<right) {
      int mid=(left+right)/2;
      mergesort(a,left,mid,temp);
      mergesort(a,mid+1,right,temp);
      merge(a,left,mid,right,temp);
    }
  } 
  public static void merge(int[] a,int left,int mid,int right,int[] temp) {
    int i=left;
    int j=mid+1;
    int t=0;
    while(i<=mid&&j<=right) {
      if(a[i]<=a[j]) {
        temp[t]=a[i];
        t++;
        i++;
      }else {
        temp[t]=a[j];
        t++;
        j++;
      }
    }
    while(i<=mid) {
      temp[t]=a[i];
      t++;
      i++;
    }
    while(j<=right) {
      temp[t]=a[j];
      t++;
      j++;
    }
    t=0;
    int templeft=left;
    while(templeft<=right) {
      a[templeft]=temp[t];
      t++;
      templeft++;
    }
  }
}

以上代码仅供参考


目录
相关文章
|
1月前
|
存储 搜索推荐 算法
Java代码归并排序
Java代码归并排序
14 0
|
1月前
|
机器学习/深度学习 算法 搜索推荐
数据结构与算法(Java篇)笔记--归并排序
数据结构与算法(Java篇)笔记--归并排序
|
3月前
|
Java
使用Java实现合并两个数组[归并排序]
使用Java实现合并两个数组[归并排序]
|
8月前
|
算法 Java
java实现归并排序
java实现归并排序
39 0
|
4月前
|
搜索推荐 算法 Java
java排序算法:快速排序、归并排序、堆排序等
排序算法:快速排序、归并排序、堆排序等
58 0
|
6月前
|
存储 搜索推荐 Java
深入了解归并排序:原理、性能分析与 Java 实现
归并排序(Merge Sort)是一种高效且稳定的排序算法,其优雅的分治策略使它成为排序领域的一颗明珠。它的核心思想是将一个未排序的数组分割成两个子数组,然后递归地对子数组进行排序,最后将这些排好序的子数组合并起来。
113 1
深入了解归并排序:原理、性能分析与 Java 实现
|
9月前
|
搜索推荐 算法 Java
【算法】归并排序的原理与Java实现
归并排序(Merge Sort)是一种经典的排序算法,基于分治(Divide and Conquer)策略。它将待排序的数组划分为多个子数组,然后分别对子数组进行排序,最后将排序好的子数组合并成一个有序的数组。归并排序的核心思想是将问题分解为更小的子问题,解决子问题后再将结果合并得到最终的解决方案。
94 0
|
算法 Java
归并排序+java基础数组。、
归并排序+java基础数组。、
57 0
归并排序+java基础数组。、
Java代码实现归并排序
#### 归并排序(Merge Sort) 思路:如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。 所以说归并排序的核心思想是排序和合并两个有序数组,这个规程需要用递归来实现。 核心思想: * 将数组拆分为两个数组,然后对两个数组各自进行排序。 * 合并两个排好序的数组。
|
搜索推荐 Java
Java归并排序
归并排序 1、原理 归并排序是一种概念上最简单的排序算法,与快速排序一样,归并排序也是基于分治法的。归并排序将待排序的元素序列分成两个长度相等的子序列,为每一个子序列排序,然后再将他们合并成一个子序列。合并两个子序列的过程也就是两路归并。 2、复杂度 归并排序是一种稳定的排序算法,归并排序的主要问题在于它需要一个与待排序数组一样大的辅助数组空间。由于归并排序每次划分时两个子序列的长度基本一样,所以归并排序最好、最差和平均时间复杂度都是nlog2n。
93 0