Merge Sort - 归并排序

Java

  1. public static void main(String[] args) {
  2. int unsortedArray[] = new int[]{6, 5, 3, 1, 8, 7, 2, 4};
  3. mergeSort(unsortedArray);
  4. System.out.println("After sort: ");
  5. for (int item : unsortedArray) {
  6. System.out.print(item + " ");
  7. }
  8. }
  9. private static void merge(int[] array, int low, int mid, int high) {
  10. int[] helper = new int[array.length];
  11. // copy array to helper
  12. for (int k = low; k <= high; k++) {
  13. helper[k] = array[k];
  14. // merge array[low...mid] and array[mid + 1...high]
  15. int i = low, j = mid + 1;
  16. // k means current location
  17. if (i > mid) {
  18. // no item in left part
  19. array[k] = helper[j];
  20. j++;
  21. } else if (j > high) {
  22. // no item in right part
  23. array[k] = helper[i];
  24. i++;
  25. } else if (helper[i] > helper[j]) {
  26. // get smaller item in the right side
  27. array[k] = helper[j];
  28. j++;
  29. } else {
  30. // get smaller item in the left side
  31. array[k] = helper[i];
  32. }
  33. }
  34. public static void sort(int[] array, int low, int high) {
  35. if (high <= low) return;
  36. int mid = low + (high - low) / 2;
  37. sort(array, low, mid);
  38. sort(array, mid + 1, high);
  39. merge(array, low, mid, high);
  40. for (int item : array) {
  41. System.out.print(item + " ");
  42. }
  43. System.out.println();
  44. }
  45. public static void mergeSort(int[] array) {
  46. sort(array, 0, array.length - 1);

Reference

  • - Robert Sedgewick 的大作,非常清晰。