挑战程序设计竞赛(算法和数据结构)——7.1归并排序JAVA实现

Posted 小乖乖的臭坏坏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战程序设计竞赛(算法和数据结构)——7.1归并排序JAVA实现相关的知识,希望对你有一定的参考价值。

归并排序

思路:

代码如下:

import java.io.BufferedInputStream;
import java.util.Scanner;

public class MergeSort {
    public static void main(String[] args) {
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
        int n = cin.nextInt();
        int[] S = new int[n];
        for (int i=0;i<n;i++){
            S[i] = cin.nextInt();
        }
        mergeSort(S, 0, n);
        for (int i=0;i<n;i++){
            System.out.print(S[i] + " ");
        }
    }

    public static void merge(int[] A, int left, int mid, int right){
        int n1 = mid - left;
        int n2 = right - mid;
        int [] L = new int[n1+1];
        int [] R = new int[n2+1];
        for(int i=0;i<n1;i++){
            L[i] = A[left+i];
        }
        for(int j=0;j<n2;j++){
            R[j] = A[mid+j];
        }
        L[n1] = Integer.MAX_VALUE;
        R[n2] = Integer.MAX_VALUE;
        int i = 0;
        int j = 0;
        for(int k = left;k<right;k++){
            if(L[i]<=R[j]){
                A[k] = L[i];
                i++;
            }
            else{
                A[k] = R[j];
                j++;
            }
        }
    }

    public static void mergeSort(int[] A, int left, int right){
        if(left+1<right){
            int mid = (left+right)/2;
            mergeSort(A,left, mid);
            mergeSort(A,mid,right);
            merge(A, left, mid, right);
        }
    }
}


输入:

10
8 5 9 2 6 3 7 1 10 4

输出:

1 2 3 4 5 6 7 8 9 10 

以上是关于挑战程序设计竞赛(算法和数据结构)——7.1归并排序JAVA实现的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法之归并排

挑战程序设计竞赛(算法和数据结构)——15.5最小生成树(Kruskal算法)的JAVA实现

挑战程序设计竞赛(算法和数据结构)——分割(下)&快速排序的JAVA实现

挑战程序设计竞赛(算法和数据结构)——19.2九宫格拼图问题的JAVA实现

挑战程序设计竞赛(算法和数据结构)——16.13线段相交问题(曼哈顿算法)的JAVA实现

挑战程序设计竞赛(算法和数据结构)——3.6希尔排序的JAVA实现