码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 归并排序~


    将一个无序系列,分成小系列,相邻两个小系列进行排序合并,再将两个相邻小系列排序合并,。。。。

    int[] data = {0,5,4,8,9,3,2,67,23}

    len = 9 

    第一次每个元素一组          0,5,4,8,9,3,2,67,23     

     相邻排序合并                    0   5,4   8,3   9,2  67,23

    第二次2个元素一组     

    相邻排序合并                    0   4  5   8,2  3   9   67,23                        

    第三次4个元素一组          

    按思路写。。。。

    1. public static void sort(){
    2. int[] data = {0,5,4,8,9,3,2,67,23};
    3. int len = data.length;
    4. for(int arr_size =1;arr_size1;arr_size*=2){
    5. int group_cnt = len/arr_size;
    6. int group_div = len%arr_size;
    7. for(int i=0,j=1;i2,j+=2){
    8. int first_index = arr_size*i,second_index=arr_size*j;
    9. ArrayList listarr = new ArrayList<>();
    10. int first_offset = 0,second_offset=0;
    11. for(;first_offset
    12. //sort
    13. if(data[first_index+first_offset]
    14. listarr.add(data[first_index+first_offset]);
    15. first_offset++;
    16. }else{
    17. listarr.add(data[second_index+second_offset]);
    18. second_offset++;
    19. }
    20. }
    21. if(first_offset < second_offset){
    22. for(;first_offset < arr_size;first_offset++){
    23. data[second_index+first_offset] = data[first_index+first_offset];
    24. }
    25. }
    26. for(int copy =0;copy
    27. data[first_index+copy]=listarr.get(copy);
    28. }
    29. }
    30. if(group_div == 1){
    31. //group_cnt * arr_size ~len
    32. /*int first_index = group_cnt * arr_size;
    33. for(int start_index = first_index+ 1;start_index <= len -1;start_index++){
    34. int insert_data = data[start_index];
    35. for(int i = start_index -1;i >=first_index;i--){
    36. if(data[i]>insert_data){
    37. data[i+1]=data[i];
    38. }else{
    39. data[i+1]=insert_data;
    40. break;
    41. }
    42. }
    43. }*/
    44. if(group_cnt == 2){
    45. //group_cnt * arr_size ~len
    46. int first_index = group_cnt * arr_size;
    47. for(int start_index = first_index;start_index <= len -1;start_index++){
    48. int insert_data = data[start_index];
    49. for(int i = start_index -1;i >=0;i--){
    50. if(data[i]>insert_data){
    51. data[i+1]=data[i];
    52. }else{
    53. data[i+1]=insert_data;
    54. break;
    55. }
    56. }
    57. }
    58. }
    59. }
    60. }
    61. }

    自底向上,这回溯了

    自顶向下分治,递归,才是正解!!!!

    归并排序(看了就会)_Circ.的博客-CSDN博客

  • 相关阅读:
    SpringMVC返回不带引号的字符串方案汇总
    【重识云原生】第六章容器6.1.7.3节——cgroups数据结构剖析
    SOLIDWORKS 2023新功能揭秘!升级版轻松找到材料明细表修改
    《UML和模式应用(原书第3版)》2024新修订译本部分截图
    免费最强下载工具IDM,没有之一
    数据结构算法之——时间复杂度和空间复杂度
    uni-app:js实现数组中的相关处理-数组复制
    JAVA接入OPC DA2.0详细流程
    Java设计模式之策略模式
    用57000字讲解完2022年Java岗面试最常问的100道题,太肝了
  • 原文地址:https://blog.csdn.net/lei7143/article/details/133018377
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号