当前位置:   article > 正文

归并排序JAVA代码详解_归并排序java代码解析

归并排序java代码解析

 源代码地址:图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园

我对其代码加入了更详细的注释 

  1. import java.util.Arrays;
  2. /**
  3. * @author teen
  4. * @create 2021/11/5 7:23
  5. */
  6. public class Test01 {
  7. public static void main(String[] args) {
  8. //定义要排序的数组
  9. int[] arr = {2,5,8,9,1,3,14,4,6,7,11,6,2,13};
  10. //定义缓存数组用来存放两个子数组的归并数组
  11. int[] temp = new int[arr.length];
  12. //对arr全体排序
  13. sort(arr,0,arr.length-1,temp);
  14. //打印数组
  15. System.out.println(Arrays.toString(arr));
  16. }
  17. private static void sort(int[] arr,int left,int right,int[] temp) {
  18. //如果还可以再细分(当左边界和右边界相同时不可再分)
  19. if(left<right){
  20. //找到两子数组的分界(以下称为 中间界) 中间界指向左子数组的最后一个数
  21. int mid = (left+right)/2;
  22. //先分左边 分组为 左边界 到 中间界
  23. //其实递归应该从下往上看,所以是先排右边子数组 后排左边子数组
  24. sort(arr,left,mid,temp);
  25. //再分右边 分组为 中间界后一个数 到 右边界
  26. //先对右边子数组排序
  27. sort(arr,mid+1,right,temp);
  28. //分完后开始“治” 排序 并合并两个子数组 以中间界为分割的两个子数组
  29. marge(arr,left,mid,right,temp);
  30. }
  31. }
  32. //核心代码
  33. private static void marge(int[] arr, int left, int mid, int right, int[] temp) {
  34. //确定左边数组的第一个元素
  35. int leftIndex = left;
  36. //确定右边数组的第一个元素
  37. int rightIndex = mid+1;
  38. //临时数组的下标
  39. int tempIndex = 0;
  40. //现在开始比大小
  41. //左数组的第一个元素和右数组的第一个元素比较,谁大谁先加入temp 直到其中一个到达边界
  42. while (leftIndex<=mid && rightIndex<=right){
  43. //如果左边数组的第一个数大于右边
  44. if (arr[leftIndex] > arr[rightIndex]){
  45. //将右子数组的第一个数放入临时数组后 指针后移
  46. temp[tempIndex++] = arr[rightIndex++];
  47. }else {
  48. //否则将左子数组的第一个数放入临时数组 指针后移
  49. temp[tempIndex++] = arr[leftIndex++];
  50. }
  51. }
  52. //如果左边数组存在没排进去的,一股脑加进去
  53. while (leftIndex<=mid){
  54. temp[tempIndex++] = arr[leftIndex++];
  55. }
  56. //如果右边数组有剩余的,一股脑加进去
  57. while (rightIndex <=right){
  58. temp[tempIndex++] = arr[rightIndex++];
  59. }
  60. //此时temp中便保留了两个子数组排序完成的归并数组
  61. //先将temp数组指针归位
  62. tempIndex = 0;
  63. //将有序归并数组整理到原数组
  64. while (left<=right){
  65. arr[left++] = temp[tempIndex++];
  66. }
  67. }
  68. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/67009
推荐阅读
相关标签
  

闽ICP备14008679号