八大排序--07归并排序

假设数组 arr[]= {5,7,4,2,0,1,6},请通过插入排序的方式,实现从小到大排列:

方法:先拆分,再合并,并在合并过程中结束临时空间进行排序;

拆分:从待排序列中间位置拆开,数据分成左右两部分,继续进行拆分,直至数据拆分成一个一个的时候停止

完整代码:

java 复制代码
package Java.start;

import java.util.Arrays;

public class MergeSort {
//归并排序
	public static void main(String[] args) {
		int[] arr= {5,7,4,2,0,1,6};
		merge_sort(arr, 0, arr.length-1);
		System.out.println(Arrays.toString(arr));
	}
	
	public static void merge_sort(int[] arr,int left,int right) {
		
		if(left==right) {
			return;//递归出口
		}else {
			int mid=(left+right)/2;
			merge_sort(arr,left,mid);//向左拆分
			merge_sort(arr, mid+1, right);//向右拆分
			
			merge(arr, left, right, mid);//合并
		}
		
	}
	
	
	public static void merge(int[] arr,int left,int right,int mid) {
		//记录两段的开始位置
		int s1=left;
		int s2=mid+1;
		
		int[] temp=new int[right-left+1];//定义临时空寂temp
		int index=0;//定义游标遍历的临时空间
		//判断s1和s2指向数据的大小,将其存入临时数据
		while(s1<=mid&&s2<=right) {
			if(arr[s1]<arr[s2]) {
				temp[index]=arr[s1];
				s1++;
				index++;
			}else {
				temp[index]=arr[s2];
				s2++;
				index++;
			}
		}
		while(s1<=mid) {//判断s1中是否有数据,若有则将其存入临时数组
			temp[index]=arr[s1];
			s1++;
			index++;
		}
		while(s2<=right) {//判断s2中是否有数据,若有则将其存入临时数组
			temp[index]=arr[s2];
			s2++;
			index++;
		}
		
		for(int j=0;j<temp.length;j++) {
			arr[left+j]=temp[j];
		}
	}
	
	
	
}

结果:

相关推荐
仟濹5 小时前
算法打卡day2 (2026-02-07 周五) | 算法: DFS | 3_卡码网99_计数孤岛_DFS
算法·深度优先
驭渊的小故事5 小时前
简单模板笔记
数据结构·笔记·算法
YuTaoShao6 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法一)前后缀分解
算法·leetcode·职场和发展
VT.馒头6 小时前
【力扣】2727. 判断对象是否为空
javascript·数据结构·算法·leetcode·职场和发展
goodluckyaa6 小时前
LCR 006. 两数之和 II - 输入有序数组
算法
孤狼warrior6 小时前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
Σίσυφος19006 小时前
PCL法向量估计 之 RANSAC 平面估计法向量
算法·机器学习·平面
xhbaitxl6 小时前
算法学习day39-动态规划
学习·算法·动态规划
I_LPL6 小时前
day23 代码随想录算法训练营 回溯专题2
算法·hot100·回溯算法·求职面试
智者知已应修善业6 小时前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法