美文网首页
归并排序-java实现

归并排序-java实现

作者: Fgban | 来源:发表于2019-07-15 19:39 被阅读0次
import java.util.Scanner;

public class TangRongjie {
    //两个有序数组的合并算法,将numb和numc合并到numa,并保持numa有序
    public static int[] merge(int[] numb, int[] numc, int[] numa) {
        //获取numb和numc的长度
        int p = numb.length;
        int q = numc.length;
        //三个数组的循环下标
        int i = 0, j = 0, k = 0;
        //当numb与numc中有一个结束时退出循环
        while(i < p && j < q) {
            //每次比较将较小的数装入numa
            if(numb[i] <= numc[j]) {
                numa[k] = numb[i];
                i = i + 1;
            }
            else {
                numa[k] = numc[j];
                j = j + 1;
            }
            k = k + 1;
        }
        //如果一个数组还有多的部分,将其依次装入numa中
        if(i == p)
            System.arraycopy(numc, j, numa, k, q - j);
        else
            System.arraycopy(numb, i, numa, k, p - i);
        return numa;
    }
    //归并排序
    public static int[] mergeSort(int[] num) {
        int n = num.length;
        //每一个数组装一半元素
        int[] numb = new int[n / 2];
        int[] numc = new int[n - (n / 2)];
        //递归过程中当某个数组长度小于等于1时结束
        if(num.length > 1) {
            //将前半部分复制到numb中,后半部分复制到numc中
            System.arraycopy(num, 0, numb, 0, n / 2);
            System.arraycopy(num, n / 2, numc, 0, n - (n / 2));
            //对两个子数组进行排序
            mergeSort(numb);
            mergeSort(numc);
            //将排好序的numb和numc合并
            merge(numb, numc, num);
        }
        return num;
    }
    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        
        int n = in.nextInt();
        int[] num = new int[n];
        
        for(int i = 0; i < num.length; i++)
            num[i] = in.nextInt();
        
        //调用算法
        num = mergeSort(num);
        for(int i = 0; i < num.length; i++)
            System.out.print(num[i] + " ");
        
        in.close();
    }
}

相关文章

  • 归并排序

    归并排序Java实现

  • 归并排序

    归并排序 代码实现(java):

  • 常用排序算法的Java实现

    冒泡、插入、选择、归并、快速排序的Java实现

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • Java代码实现归并排序

    Java代码实现归并排序 归并排序(Merge Sort) 思路:如果要排序一个数组,我们先把数组从中间分成前后两...

  • 面试知识点

    排序冒泡排序快速排序选择排序插入排序二路归并 查找二分查找 排序和查找的java实现 java语言Java字符串字...

  • 排序算法Java实现

    本文会通过Java语言实现:冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序,希尔排序...

  • 排序算法的实现

    用java对常用内部排序算法的实现。 对冒泡排序,简单选择排序,直接插入排序,希尔排序,归并排序的简单实现(缺少快...

  • 算法—排序篇2

    1、归并排序(Merging Sort) 归并排序(Merging Sort): 就是利用归并的思想实现排序⽅法....

  • 归并排序&快速排序

    归并排序 利用归并的思想实现排序方法,该算法采用经典的分治策略,分而治之。 代码实现 基础设置 归并排序 —— 非...

网友评论

      本文标题:归并排序-java实现

      本文链接:https://www.haomeiwen.com/subject/twuokctx.html