归并排序(Java实现)

mac2022-06-30  27

归并排序

假如我们有两个有序数组,我们需要合并到一个数组里,并且重新进行排序。

A数组: [1, 23, 5, 37, 9, 99, 201] B数组: [12, 4, 6, 18, 100]

 

介绍第五种排序算法:

归并排序

前提:

两个数组必须有序。

核心思想:

创建一个新数组,容量为两个数组的长度和。遍历A,B两个数组中的元素,进行比较,较小的先放入新数组中,较大的后放入数组。当有一个数组遍历完毕后,再将另一个数组中的元素全部放入新数组中,完成归并排序。

示例代码:

package com.evan.merge_sort; import java.util.Arrays; public class MergeSort { public static void main(String[] args) { int[] firstArray = {1, 23, 5, 37, 9, 99, 201}; int[] secondArray = {12, 4, 6, 18, 100}; System.out.println("A数组: " + Arrays.toString(firstArray)); System.out.println("B数组: " + Arrays.toString(secondArray)); Arrays.sort(firstArray); Arrays.sort(secondArray); System.out.println("排序后A数组: " + Arrays.toString(firstArray)); System.out.println("排序后B数组: " + Arrays.toString(secondArray)); int[] mergeSort = mergeSort(firstArray, secondArray); System.out.println("归并排序后: " + Arrays.toString(mergeSort)); } public static int[] mergeSort(int[] a, int[] b) { if(null == a || null == b || a.length == 0 || b.length == 0) { return null; } int[] result = new int[a.length + b.length]; int i = 0, j = 0, target = 0; while(i < a.length && j < b.length) { int aElement = a[i]; int bElement = b[j]; if(aElement <= bElement) { result[target] = aElement; i++; target++; }else { result[target] = bElement; j++; target++; } } if(i < a.length) { for (int k = i; k < a.length; k++) { result[b.length + i] = a[i]; } } if(j < b.length) { for (int k = j; k < b.length; k++) { result[a.length + k] = b[k]; } } return result; } }

 

 

最新回复(0)