• 归并排序(java)


    基本思想:

    分解: 将n个待排序的元素分成 n/2个元素的子序列

    排序:  递归对每个子序列进行合并,并且两两合并排序

    合并: 合并最后已排序的子序列得到排序结果

    递归法: 

    将待排序序列从中间分割成2部分,再把2部分分割成4部分, 依次分割下去, 直至分割成一个一个的元素, 在把这些元素两两归并在一起,使之有序, 最后递归成一个已排好序的序列

    待排序序列     4 2 5 3 1 6 9 7 

    分割     [4,2,5,3]                                 [1,6,9,7]

    分割        [4,2] [5,3]                         [1,6], [9,7]

    分割         [4], [2], [5], [3]                [1], [6], [9], [7]

    归并         [2,4]    [3,5]                   [1,6],   [7,9]

    归并          [2,3,4,5]                [1,6,7,9]

    归并        1 2 3 4 5 6 7 9 

    归并排序完成 

    伪代码:只需记住核心代码即可, 不增加没必要的记忆负担

    1. public int[] sort(int[] sourceArray){
    2. //copyOf用法: 第一个参数为要拷贝的数组对象 第二参数为拷贝的新数组长度
    3. //copyOfRange(data,0,16)用法: 表示复制data数组中第0个到第16个元素到新数组中
    4. int[] arr=Arrays.copyOf(sourceArray, sourceArray.length);
    5. int middle = arr.length/2;
    6. int[] left = Arrays.copyOfRange(arr,0,middle);
    7. int[] right = Arrays.copyOfRange(arr,middle,arr.length);
    8. return merge(sort(left),sort(right));
    9. }
    10. //归并函数
    11. protected int[] merge(int[] left, int[] right){
    12. int[] result = new int[left.length + right.length];
    13. int i =0;
    14. while(left.length>0 && right.length>0){
    15. //两个数组中取出较小的放入数组
    16. if(left[0] <= right[0]){
    17. result[i++]=left[0];
    18. left=Arrays.copyOfRange(left,1,left.length);
    19. }else{
    20. result[i++]=right[0];
    21. right = Arrays.copyOfRange(right, 1, right.length);
    22. }
    23. }
    24. //如果分割出来的数组不是相等,依次递归左边 子序列 和右边子序列
    25. while(left.length > 0){
    26. result[i++]=left[0];
    27. left = Arrays.copyOfRange()
    28. }
    29. // 右边子序列递归
    30. while(right.length > 0){
    31. result[i++]=right[0];
    32. right = Arrays.copyOfRange(right,1, right.length);
    33. }
    34. return result
    35. }

  • 相关阅读:
    10年开发大佬,用300案例,附学习路线,详解多线程编程核心
    java基础3
    关于苏州立讯公司国产替代案例(使用我公司H82409S网络变压器和E1152E01A-YG网口连接器产品)
    自己手写RISCV架构CPU-4其它指令
    React(二):Redux基本使用方法
    Xshell+screen解决ssh连接 服务器掉线的问题
    [NSSCTF 2nd]Math
    Windows 和linux下面安装mongodb6
    CMake教程-第 1 步:基本起点
    一张图搞定CSS选择器的优先级
  • 原文地址:https://blog.csdn.net/dwl764457208/article/details/126904375