归并排序~

news2024/12/23 1:15:12

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

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个元素一组          

按思路写。。。。

public static void sort(){
        int[] data = {0,5,4,8,9,3,2,67,23};
        int len = data.length;


        for(int arr_size =1;arr_size<len && len/arr_size>1;arr_size*=2){
            int group_cnt = len/arr_size;
            int group_div = len%arr_size;

            for(int i=0,j=1;i<group_cnt&&j<group_cnt;i+=2,j+=2){
                int first_index = arr_size*i,second_index=arr_size*j;
                ArrayList<Integer> listarr = new ArrayList<>();
                int first_offset = 0,second_offset=0;

                for(;first_offset<arr_size&&second_offset<arr_size;){
                    //sort
                    if(data[first_index+first_offset]<data[second_index+second_offset]){
                        listarr.add(data[first_index+first_offset]);
                        first_offset++;
                    }else{
                        listarr.add(data[second_index+second_offset]);
                        second_offset++;
                    }
                }

                if(first_offset < second_offset){
                    for(;first_offset < arr_size;first_offset++){
                        data[second_index+first_offset] = data[first_index+first_offset];
                    }
                }

                for(int copy =0;copy<listarr.size();copy++){
                    data[first_index+copy]=listarr.get(copy);
                }

            }

            if(group_div == 1){
                //group_cnt * arr_size ~len
                /*int first_index = group_cnt * arr_size;
                for(int start_index =  first_index+ 1;start_index <= len -1;start_index++){
                    int insert_data = data[start_index];
                    for(int i = start_index -1;i >=first_index;i--){
                        if(data[i]>insert_data){
                            data[i+1]=data[i];
                        }else{
                            data[i+1]=insert_data;
                            break;
                        }
                    }
                }*/
                if(group_cnt == 2){
                    //group_cnt * arr_size ~len
                    int first_index = group_cnt * arr_size;
                    for(int start_index =  first_index;start_index <= len -1;start_index++){
                        int insert_data = data[start_index];
                        for(int i = start_index -1;i >=0;i--){
                            if(data[i]>insert_data){
                                data[i+1]=data[i];
                            }else{
                                data[i+1]=insert_data;
                                break;
                            }
                        }
                    }
                }
            }
        }
    }

自底向上,这回溯了

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue框架分享与总结

总结开发中最常用的vue语法&#xff0c;以及对特定语法的理解。vue官网 文章目录 一、创建vue项目1、使用开发工具创建2、使用命令行创建3、vue框架结构4、Vue文件结构 二、Vue 常用模板语法1、v-if、v-show2、v-for3、v-on4、v-bind5、v-model 三、组件通信1、父组件给子组件传…

Bytebase 2.8.0 - ​全新升级的数据脱敏功能

&#x1f680; 新功能 全新升级的数据脱敏功能&#xff0c;提供更加细化的脱敏和访问权限配置。全新升级的 SQL 编辑器界面。库表同步功能支持 Oracle。支持设置公告。 &#x1f384; 改进 新增基于 MySQL parser 的数据脱敏内核。调整了侧边栏数据库列表&#xff0c;用最近…

Docker实战-第一章欢迎来到Docker世界

Docker基础 什么是Docker docker是包括一个命令行程序、后台守护进程和一组远程服务&#xff0c;它简化了安装、运行、发布和删除软件的工作。docker实现的基础是UNIX的容器技术。所以在docker出世之前已经有容器的概念&#xff0c;而且像谷歌一类公司也在探索自己的容器&…

关于taos数据库使用过程中突发“unable to establish connection”问题解决

项目使用的版本信息 1.taos的版本信息 3.0.4.1 2.jdbc的版本 3.2.1 3.druid连接池版本 1.2.11问题描述 Java应用服务连接&#xff0c;突然大量抛出如下的异常信息导致应用宕机&#xff1a; sql: select server_status(), desc: unable to establish connection和集团DBA沟通…

云原生微服务 第四章 Spring Cloud Netflix 之 Eureka

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 文章目录 系列文章目录[TOC](文章目录) 前言1、Eureka 两大组件2、Eureka 服务注册与发现3、案例3.1、创建主工程3.1.1、主…

(超详解)堆排序+(图解)

目录&#xff1a; 1:如何建堆(两种方法) 2:两种方法建堆的时间复杂度分析与计算 3:不同类型的排序方式我们应该如何建堆 文章正式开始&#xff1a; 1&#xff1a;如何建堆 在实现堆排序之前我们必须得建堆&#xff0c;才能够实现堆排序 首先在讲解如何建堆之前让我们先来回顾一…

保研复习-计算机组成原理

计算机组成原理 计算机组成冯诺依曼体系结构计算机系统的层次结构计算机的五大组成部件编译和解释的区别 CPUCPU的组成寄存器的类型指令类型指令功能指令执行过程 存储器存储器的层次结构寻址方式 输入和输出io方式有哪几种IO接口的基本结构 计算机组成 冯诺依曼体系结构 存储…

如何将你在树莓派上部署的 IoT 物联网 MQTT 服务发布到公网?

​ 上一章&#xff0c;你成功的在树莓派搭建了 EMQX 开源社区版&#xff0c;用来提供 MQTT 服务&#xff0c;并验证了设备端接入和消息通信。但你发现只能在局域网内访问 emqx.local 服务&#xff0c;而 IoT 设备分布在全国各地公共网络环境&#xff0c;这些设备该如何接入呢&a…

Android 13 CameraMetadata详解1 (内存分布以及增删改查)

文章目录 简介allocate_camera_metadataadd_camera_metadata_entrydelete_camera_metadata_entryupdate_camera_metadata_entryfind_camera_metadata_entry 点赞收藏加关注&#xff0c;下次找我不迷路。 也欢迎关注微信公众号 无限无羡 期待与你的相识&#xff01; 简介 初识…

【面试必刷TOP101】删除链表的倒数第n个节点 两个链表的第一个公共结点

目录 题目&#xff1a;删除链表的倒数第n个节点_牛客题霸_牛客网 (nowcoder.com) 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com) …

雷达仿真:FMCW DDMA-MIMO 3D点云获取方法

1.DDMA-MIMO原理 由于TDMA-MIMO采用不同单天线交替发射信号&#xff0c;没有更好的利用发射天线同时工作的发射资源&#xff0c;导致发射功率低以及损耗大&#xff0c;从而使得TDMA波形只能应用在近距离探测的低功率雷达场景。而DDMA波形则能很好的弥补TDMA上述缺点&#xff0c…

为什么用IP访问网站也要使用SSL证书

IP地址SSL证书是一种专门用于公网IP地址验证的数字证书。它可以为公网IP地址提供安全的数据传输保障&#xff0c;解决了IP地址明文传输的安全隐患&#xff0c;保护了IP地址的数据传输安全。 与普通的SSL证书不同&#xff0c;IP地址SSL证书是基于IP地址进行验证的。在申请IP地址…

ssh登录时间久或登陆后报错

情况1 问题描述&#xff1a; ssh登录时间很久&#xff0c;登录后出现abrt-cli status timed out 的报错 问题原因&#xff1a; .lock文件被锁导致 执行systemctl status abrtd.service可以看到被锁的.lock 处理方式&#xff1a; ps -ef | grep pid 找到被锁的进程kill掉…

Java基于SpringBoot的在线考试系统的研究与实现(附源码,教程)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 第一章第二章.主要技术第三章第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数…

Windows安装cuda和cudnn教程最新版(2023年9月)

文章目录 cudacudnn cuda 查看电脑的cuda最高驱动版本&#xff08;适用于N卡电脑-Nvidia&#xff09; winR打开命令行&#xff0c;输入nvidia-smi 右上角cuda -version就是目前支持的最高cuda版本 nvidia官网下载cuda 下载地址&#xff1a;https://developer.nvidia.com/cuda…

pip常用指令

文章目录 简介pip的基本用法常用指令查看pip版本安装Python软件包指定版本安装Python软件包pip安装多个Python软件包通过requirements.txt文件批量安装Python软件包pip安装本地whl安装包 下载安装包到本地将已安装的Python软件包信息导出到指定文件中卸载Python软件包查看当前环…

[S2] Challenge 25 心脏病预测

问题 您是一家医疗保健公司的数据科学家&#xff0c;试图创建患者是否患有心脏病的预测因子。目前&#xff0c;您正在试验 11 种不同的特征&#xff08;潜在心脏病指标&#xff09;和 XGBoost 分类模型&#xff0c;您注意到它的性能可能会根据其调整方式而发生很大变化。在此挑…

Git学习笔记3

Git分支管理&#xff1a; 先来考虑一个问题: 开发者A开发软件的某一个功能模块, 还没有开发完成&#xff0c;但害怕进度丢失就提交。假设另一位开发者B并不知道A没有完成, 而直接使用了A开发的文件,这造成了问题。 解决方法: 开发者A创建一个属于自己的分支&#xff0c;这个分…

vite+react 使用 react-activation 实现缓存页面

对应的版本 "react": "^18.2.0", "react-activation": "^0.12.4", "react-dom": "^18.2.0", "react-router-dom": "^6.15.0",react-activation 这是一个npm包&#xff0c;在react keep alive…

Linux服务器查看CPU相关信息

文章目录 一、基本概念cpu个数cpu核数超线程技术 二、查看命令查看CPU型号查看物理CPU个数&#xff08;物理层面&#xff09;查看每个物理CPU中core个数(核数)查看逻辑CPU个数&#xff08;逻辑层面&#xff09; 三、以上概念的关系参考资料 一、基本概念 cpu个数 物理cpu个数…