读书人

容易实现MergeSort

发布时间: 2012-10-13 11:38:17 作者: rapoo

简单实现MergeSort

public class MergeSort {public static void main(String[] args) {MergeSort ms = new MergeSort();// int[] a = ms.merge(3, 2);// a = ms.merge(2, 3);int[] b = { 1, 2, 3, 4, 5, 6 };int[] c = { 4, 5, 6, 7, 6, 354, 7542, 61, 34, 67, 8, 3, 4, 8, 1, 4, 6,89, 2, 3, 4, 7, 234, 545, 2, 34, 8 };long start = System.currentTimeMillis();c = ms.sort(c);long end = System.currentTimeMillis();System.out.println("MergeSort a array with lenght of " + c.length+ " in " + (end - start) + " second");for (int i = 0; i < c.length; i++) {System.out.println(c[i]);}}private int[] sort(int[] number) {int dividPoint = number.length / 2;// 4-2 5-2;// int secondPart = firstPart+1;int[] sortedArray = null;int[] firstArray = getArray(number, 0, dividPoint);int[] secondArray = getArray(number, dividPoint, number.length);// secondArray = divid(secondArray);if (firstArray.length > 2) {firstArray = sort(firstArray);} else if (firstArray.length <= 2) {firstArray = merge(firstArray);}if (secondArray.length > 2) {secondArray = sort(secondArray);} else if (secondArray.length <= 2) {secondArray = merge(secondArray);}sortedArray = merge(firstArray, secondArray);return sortedArray;}private int[] getArray(int[] arr, int start, int end) {int[] subArray = new int[end - start];int subindex = 0;for (int index = start; index < end; index++) {subArray[subindex] = arr[index];subindex++;}return subArray;}private int[] merge(int i, int j) {int[] array = new int[2];if (i > j) {array[0] = j;array[1] = i;} else {array[0] = i;array[1] = j;}return array;}private int[] merge(int[] i) {int[] returnArr = null;if (i.length == 1) {returnArr = merge(i[0]);}if (i.length == 2) {returnArr = merge(i[0], i[1]);}return returnArr;}private int[] merge(int i) {int[] array = new int[1];array[0] = i;return array;}private int[] merge(int[] i, int[] j) {int[] array = new int[i.length + j.length];int pointi = 0;int pointj = 0;for (int index = 0; index < array.length; index++) {if (pointi < i.length && pointj < j.length) {if (i[pointi] <= j[pointj]) {array[index] = i[pointi];pointi++;} else {array[index] = j[pointj];pointj++;}} else {if (pointi == i.length && pointj < j.length) {int addedIndex = i.length + pointj - 1;for (int newIndex = addedIndex + 1; newIndex < array.length; newIndex++) {array[newIndex] = j[pointj];pointj++;}break;}if (pointi < i.length && pointj == j.length) {int addedIndex = j.length + pointi - 1;for (int newIndex = addedIndex + 1; newIndex < array.length; newIndex++) {array[newIndex] = i[pointi];pointi++;}break;}}}return array;}}

读书人网 >编程

热点推荐