当前位置:  首页>> 技术小册>> Java面试指南

当需要对一个较大的数组进行排序时,归并排序是一种非常高效的排序算法。它的基本思想是将一个大数组分成两个子数组,递归地对两个子数组进行排序,然后再将排序后的子数组合并成一个大数组。下面是一个使用Java编写的归并排序算法:

  1. public class MergeSort {
  2. public void sort(int[] arr) {
  3. if (arr == null || arr.length <= 1) {
  4. return;
  5. }
  6. mergeSort(arr, 0, arr.length - 1);
  7. }
  8. private void mergeSort(int[] arr, int left, int right) {
  9. if (left < right) {
  10. int middle = (left + right) / 2;
  11. mergeSort(arr, left, middle);
  12. mergeSort(arr, middle + 1, right);
  13. merge(arr, left, middle, right);
  14. }
  15. }
  16. private void merge(int[] arr, int left, int middle, int right) {
  17. int[] temp = new int[arr.length];
  18. for (int i = left; i <= right; i++) {
  19. temp[i] = arr[i];
  20. }
  21. int i = left;
  22. int j = middle + 1;
  23. int k = left;
  24. while (i <= middle && j <= right) {
  25. if (temp[i] <= temp[j]) {
  26. arr[k] = temp[i];
  27. i++;
  28. } else {
  29. arr[k] = temp[j];
  30. j++;
  31. }
  32. k++;
  33. }
  34. while (i <= middle) {
  35. arr[k] = temp[i];
  36. k++;
  37. i++;
  38. }
  39. while (j <= right) {
  40. arr[k] = temp[j];
  41. k++;
  42. j++;
  43. }
  44. }
  45. }

在这个算法中,sort方法调用了私有的mergeSort方法,该方法递归地对左半部分和右半部分进行排序,最后将这两个部分合并。