import lombok.extern.slf4j.Slf4j;import java.util.Arrays;import java.util.Random;/*** @author Amadeus* @date 2020/07/07* @desc 利用二路归并算法合并两个有序的数组,时间复杂度为O(n)*/@Slf4jpublic class MergeDoubleArrays {public static void main(String[] args){Random random = new Random();int[] arr1 = new int[520];int[] arr2 = new int[1314];for (int i = 0; i < 520; i++){arr1[i] = random.nextInt(10000)+1;}log.info("数组arr1乱序的数据:{}",Arrays.toString(arr1));Arrays.sort(arr1);log.info("数组arr1有序的数据:{}",Arrays.toString(arr1));log.info("===================================================分界线=========================================================");for (int j = 0; j < 1314; j++){arr2[j] = random.nextInt(10000)+1;}log.info("数组arr2乱序的数据:{}",Arrays.toString(arr2));Arrays.sort(arr2);log.info("数组arr2有序的数据:{}",Arrays.toString(arr2));log.info("================================================二路归并算法实现有序数组合并(时间复杂度为O(n))===============================================");int i = 0;int j = 0;int k = 0;int len = arr1.length + arr2.length;int[] arr = new int[len];while(i < arr1.length && j < arr2.length){if (arr1[i] <= arr2[j]){arr[k++] = arr1[i++];}else {arr[k++] = arr2[j++];}}if (i == arr1.length && j < arr2.length){while (j < arr2.length){arr[k++] = arr2[j++];}}if (j == arr2.length && i < arr1.length){while (j < arr1.length){arr[k++] = arr1[i++];}}log.info("两个有序数组合并后的结果:{}",Arrays.toString(arr));}}
利用二路归并算法合并两个有序的数组,时间复杂度为O(n)
最新推荐文章于 2024-04-15 19:40:30 发布