package test; import java.util.Arrays; public class MergeSorter { private int[] sort(int[] in1, int[] in2) { int[] out = new int[in1.length + in2.length]; int i = 0, j = 0, k = 0; while (i < in1.length && j < in2.length) { if (in1[i] <= in2[j]) { out[k++] = in1[i++]; } else { out[k++] = in2[j++]; } } for (int t1 = i; t1 < in1.length; t1++) { out[k++] = in1[t1]; } for (int t2 = j; t2 < in2.length; t2++) { out[k++] = in2[t2]; } return out; } private int[][] merge(int[][] input) { int len = (int) Math.ceil(input.length / 2.0); int[][] output = new int[len][]; int k = 0; for (int i = 0; i < input.length; i+=2) { if (i == input.length - 1) { output[k++] = input[i]; } else { output[k++] = sort(input[i], input[i+1]); } } return output; } public int[] sort(int[] input) { int[][] mergeArray = new int[input.length][]; for (int i = 0; i < input.length; i++) { int[] arr = {input[i]}; mergeArray[i] = arr; } while (mergeArray.length > 1) { mergeArray = merge(mergeArray); } return mergeArray[0]; } /** * @param args */ public static void main(String[] args) { int[] sample = {6, 202, 100, 301, 38, 8, 1, 98, 2, 13, 24, 45}; MergeSorter tester = new MergeSorter(); int res[] = tester.sort(sample); System.out.println(Arrays.toString(res)); } }
Java归并排序
最新推荐文章于 2021-01-18 16:19:08 发布