挑战程序设计竞赛(算法和数据结构)——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实现