MergeSort is a sample solution from the idea Dive - and - Conquer.
I show my code below:
java 代码
- public class MergeSort {
- public static void sort(int[] array, int i, int j) {
- if (j-i == 1) {
- if (array[i]>array[j]) {
- int tmp = array[i];
- array[i] = array[j];
- array[j] = tmp;
- }
- } else {
- int mid = (i + j - 1) / 2;
- sort(array, i, mid);
- sort(array, mid+1, j);
- int[] newArray = merge(array, i, mid, mid+1, j);
- int k = 0;
- for (int index = i; index<=j; index++) {
- array[index] = newArray[k];
- k++;
- }
- }
- }
- public static int[] merge(int[] array, int i, int m, int j, int n) {
- int[] newArray = new int[n-i+1];
- int k = 0;
- while ((i<=m) && (j<=n)) {
- if (array[i]<array[j]) {
- newArray[k] = array[i];
- i++;
- k++;
- } else {
- newArray[k] = array[j];
- j++;
- k++;
- }
- }
- if (i>m) {
- for ( ; j<=n; j++) {
- newArray[k++] = array[j];
- }
- } else {
- for ( ; i<=m; i++) {
- newArray[k++] = array[i];
- }
- }
- return newArray;
- }
- public static void main(String[] args) {
- int[] array = {1, 4, 2, 5, 2, 6, 3, 0};
- sort(array, 0, array.length - 1);
- for (int i=0; i<array.length; i++) {
- System.out.print(array[i] + " ");
- }
- }
- }