From 98cb279006303a67d4ad9ca4c861cf043f5deac1 Mon Sep 17 00:00:00 2001 From: gallon Date: Thu, 15 Nov 2018 11:09:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BD=92=E5=B9=B6=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E7=A9=BA=E9=97=B4=E4=BD=BF=E7=94=A8(=E5=87=8F?= =?UTF-8?q?=E5=B0=91=E4=B8=8D=E5=BF=85=E8=A6=81copy)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java/main/MergeSort.java | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/java/main/MergeSort.java b/src/java/main/MergeSort.java index 7fec2b8..6457036 100644 --- a/src/java/main/MergeSort.java +++ b/src/java/main/MergeSort.java @@ -23,25 +23,25 @@ public int[] sort(int[] sourceArray) throws Exception { protected int[] merge(int[] left, int[] right) { int[] result = new int[left.length + right.length]; - int i = 0; - while (left.length > 0 && right.length > 0) { - if (left[0] <= right[0]) { - result[i++] = left[0]; - left = Arrays.copyOfRange(left, 1, left.length); + int l = 0, r = 0, len = 0; + while (len < left.length + right.length) { + if (left[l] <= right[r]) { + result[len++] = left[l++]; + + if (l == left.length) { + for (int i = r; i < right.length; i++) { + result[len++] = right[r++]; + } + } } else { - result[i++] = right[0]; - right = Arrays.copyOfRange(right, 1, right.length); - } - } + result[len++] = right[r++]; - while (left.length > 0) { - result[i++] = left[0]; - left = Arrays.copyOfRange(left, 1, left.length); - } - - while (right.length > 0) { - result[i++] = right[0]; - right = Arrays.copyOfRange(right, 1, right.length); + if (r == right.length) { + for (int i = l; i < left.length; i++) { + result[len++] = left[l++]; + } + } + } } return result;