归并排序java版_归并排序Java实现
1.思想
归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治策略
分治法将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之。
总结来说(重点):把序列不断对半拆分,直到分到仅剩一个元素,将它们排序合并;然后处理两个元素的序列,排序合并,如此类推。
分而治之:
分:从上往下,直到拆分到一个元素
治:从下往上,从单个元素合并成一条有序的序列
再来看最后的合并阶段,算法实现只需要维护两个左右指针即可。
Java代码实现
import java.util.Arrays;
public class MergeSort {
public static void main(String[] args) {
int [] arr = {1,5,6,4,9,2,3,8,7};
Sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void Sort(int arr[]){
int [] temp = new int[arr.length];//开辟一个原数组长度一样的数组,避免递归的时候频繁开辟空间
Divide(arr,0,arr.length-1,temp);
}
public static void Divide(int [] arr,int left,int right,int [] temp){
if(left
int mid = (left+right)/2; //每次规模减少一半
Divide(arr,left,mid,temp); //右边序列的排序并且归并为一个数组
Divide(arr,mid+1,right,temp);//左边序列的排序并且归并为一个数组
Merge(arr,left,mid,right,temp);//合并两个数组
}
}
public static void Merge(int [] arr,int left,int mid,int right,int [] temp){
int i = left;
int j = mid+1;
int t = 0;
// 左右两边移动指针比较,取较小的一个数放进temp数组
while (i<=mid && j<=right){
if (arr[i]<=arr[j]){
temp[t++] = arr[i++];
}else {
temp[t++] = arr[j++];
}
}
// 把左或右多出的数,推入数组
while (i<=mid){
temp[t++] = arr[i++];
}
while(j<=right){
temp[t++] = arr[j++];
}
// 最后把temp数组替换原数组
t = 0;
while (left<=right){
arr[left++] = temp[t++];
}
}
}
2.算法分析
归并排序的时间复杂度包括分解,比较,合并。
最好的情况下,数组是已排序的,那么归并排序的时间复杂度为O(n)级的。
最坏的情况下,数组是逆序的,那么归并排序的时间复杂度为O(nlogn)级的。归并排序的平均时间复杂度是O(nlogn)。
归并排序java版_归并排序Java实现相关推荐
- nes模拟器java版_【Java JDK和VirtuaNES(FC模拟器)哪个好用】Java JDK和VirtuaNES(FC模拟器)对比-ZOL下载...
fc模拟器virtuanes怎么录像打开游戏,在你想要开始录像的地方点上面的电影→录像(此时选择你想把录像文件放置的位置和文件名),他就开始录了,在你想录的结尾再点电影→停止 这个时候,在你选的位置就 ...
- 视频教程-企业微信支付JAVA版_向员工收款-微信开发
企业微信支付JAVA版_向员工收款 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试(软考)--"信息 ...
- 来电通java版_我的世界基岩版1.19正式版下载-我的世界基岩版1.19下载手机版v1.19...
我的世界基岩版是我的世界手游的特殊版本,在这个特殊版本中玩家可以体验到特殊的游戏玩法,特殊的版本加入了特殊的元素,带给玩家的特殊的游戏体验,还有很多的新的游戏道具以及新的玩法,游戏以像素的风格为玩家进 ...
- 简易贪吃蛇小游戏java版_用GUI实现java版贪吃蛇小游戏
本文实例为大家分享了java版贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public stat ...
- 来电通java版_还在玩JAVA版《我的世界》?教你怎么转换存档玩光追!
简介 如果你一直在花时间扩展和开发"我的世界 (Minecraft)" Java 版世界,那下面为你公布一则好消息:此版本现可转换为"我的世界 (Minecraft)&q ...
- 我的世界java版_我的世界Java版1.15版本
我的世界Java版1.15版本迎来了新玩法新版本,更加自由好玩的沙盒世界,一场非对称性的竞技战斗环节,玩家可以自由发挥,体验建造,守卫,竞技,养成等多样化的游戏环节,快节奏的对决方式,获取胜利,全新的 ...
- 我的世界java版_我的世界Java版1.16.5
我的世界Java版1.16.5终于经历多次测试终于推出了全新的正式版本哦,在这款游戏中修复了大量的bug确保玩家在游戏中可以尽情的创造玩耍,另外游戏中玩家可以利用各种资源组件来打造一场令人惊叹的奇迹建 ...
- 植物大战僵尸java版_植物大战僵尸:M8版 JAVA版下载
植物大战僵尸 for 魅族M8 魅族M8版的植物大战僵尸推出时间比iPhone版的还要早,但是其开发团队Yeti工作室由国内的一些魅族M8爱好者组成,所以截至目前为止,在界面和内容上仍存在一定的不足, ...
- ios我的世界java版_我的世界Java版
我的世界Java版是我的世界游戏的一个版本,游戏中有很多全新的玩法,玩家将创建自己的角色出生在一个像素世界中,整个游戏世界由一个个像素方块组成,玩家可以操控角色任意破坏方块,玩家将和方块像素人开展一段 ...
- 我的世界win10版与java版_我的世界java版和win10版的区别
在我的世界中,游戏有着java和win10这两个版本,那这两个版本有什么区别吗?对此不明白的玩家就看看以下内容吧! 我的世界java版和win10版的区别 java版是由Mojang Studios开 ...
最新文章
- js 输出中文乱码 解决办法
- 在vi里面实现字符串的批量替换
- [学习笔记]树链剖分
- 项目案例分享四:DC升级后Sysvol停止复制,日志报13508
- QTP11恢复30天试用破解
- 懒办法1篇文10分钟快速入门MySQL增删查改
- python项目打包部署到ios_Python iOS 自动打包脚本(包含上传到fir)
- Opencv透视变换——cv::getPerspectiveTransform()与cv::warpPerspective()详解
- python3 单例模式_当python,单例模式,多例模式,一次初始化遇到一起
- 中望cad自定义快捷键命令_中望cad常用快捷键及命令
- 禅道linux客户端服务端,禅道11.0版本发布,主要集成禅道客户端
- QRCode二维码生成与识别
- 成长之路——发现问题、提出问题和解决问题
- 电商项目高并发下库存处理redisson
- cold start
- 记账的目的和好处是什么
- ifconfig结果详解
- 卸载 nginx 彻底删除
- git 小乌龟安装教程
- 国外免费 E-Book
热门文章
- 【历史上的今天】5 月 28 日:图灵提交划时代论文;DR DOS 的第一个版本发布;TrueCrypt 停止开发
- html页面自动登录,抓取网页时自动登录和自动输入验证码
- python加粗字体_Python:openpyxl将字体更改为粗体 - python
- 用命令关闭计算机,使用DOS命令关机的操作步骤
- wps页码从指定页开始_wps怎么自动生成页码以及设置页码从第三页开始
- 日常软件使用系列收集
- arcgis desktop10.2(arcmap)安装教程,已成功安装
- Hadoop安装教程(Hadoop3.3.1版本),centos7系统,避免踩坑
- GNS3新手安装教程
- matlab 积分函数曲线,matlab数值积分函数