归并排序(递归实现、非递归实现)

news/2024/5/17 17:12:39 标签: 归并排序, 递归, 非递归
public class Solution {
	
	// 子环节,归并两个有序的数组
	public void MergeSort(int[] arr, int left, int mid, int right){
		int[] arr2 = new int[mid - left + 1];
		int[] arr3 = new int[right - mid];
		int length1 = mid - left + 1;
		int length2 = right - mid;
		for(int i = 0; i < length1; i++)
			arr2[i] = arr[i + left];
		for(int i = 0; i < length2; i++)
			arr3[i] = arr[i + mid + 1];
		int i = left, j = 0, k = 0;
		while(j< length1 && k < length2) {
			if(arr2[j] > arr3[k]) {
				arr[i++] = arr3[k];
				k++;
			}else {
				arr[i++] = arr2[j];
				j++;
			}
		}
		while(j < length1) {
			arr[i++] = arr2[j++];
		}
		while(k < length2) {
			arr[i++] = arr3[k++];
		}
	}
  
	// [left, right]
	// 递归归并排序
	public void Merge(int[] arr, int left, int right){
		
		if(left < right) {	
		int mid;
		mid = (left + right) / 2;
		Merge(arr, left, mid);
		Merge(arr, mid+1, right);
		MergeSort(arr, left, mid, right);
		
		}
	}
	// 非递归归并排序
	public void Merge2(int[] arr, int n) {
		for(int size = 1; size <= n; size += size)
			for(int i = 0; i + size - 1< n; i += 2*size)
				MergeSort(arr, i, i + size - 1, Math.min(i + 2*size - 1, n-1));
	}
    public static void main(String[] args) {
		int[] arr = new int[]{1, 3, 2, 0, 9, 5, 7, -8, -7};
		Solution solution = new Solution();
		solution.Merge(arr, 0, arr.length-1);
		//solution.Merge2(arr, arr.length);
		for(int i : arr) {
			System.out.print(i + " ");
		}
	}
}

http://www.niftyadmin.cn/n/1712186.html

相关文章

oc与html文字编码转换,iOS开发-OC中特殊字符串编码解码

写在前面&#xff1a;本文旨在解决OC中字符串的编码解码问题&#xff0c;并非是HTML5或者其语言的转码问题。特殊字符编码解码Foundation框架- (NSString *)ocstringEncode:(NSString *)str {return [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet …

p9plus升级鸿蒙,华为P9 Plus(VIE-AL10 EMUI 8.0)手机完美获取root教程,最强root工具,亲测可用!...

想要快速获取root权限&#xff0c;就用奇兔刷机。伴随着安卓刷机越来越流行&#xff0c;很多安卓用户都喜欢上了这种可以自定个性系统的行为&#xff0c;那么华为P9 Plus(VIE-AL10 EMUI 8.0)怎么ROOT?华为P9 Plus(VIE-AL10 EMUI 8.0) ROOT过程如何操作呢?今天&#xff0c;小编…

用html显示渐变效果,HTML – 如何使用CSS渐变创建这样的“闪亮”效果?

是否可以仅使用CSS创建以下内容&#xff1f;我创造了容器和圆角.小提琴here.但我不知道如何获得轻微的闪亮效果.是否可以在CSS中执行此操作&#xff1f;如果是这样的话&#xff1f;下面是我到目前为止编写的代码.HTMLCSS#phone-outer {margin-bottom:200px;margin:0 auto;width…

XP的用户账户使用了HTML界面,WinXP点击用户账户提示参数无效怎么解决?

WinXP系统开机后&#xff0c;映入眼帘的通常是欢迎屏幕登录方式和快速用户切换的功能&#xff0c;它将一台电脑分成了多个用户账户&#xff0c;每一个用户账户都能设置自己的风格&#xff0c;不但容易分辨而且账户之间互不影响&#xff0c;使用起来非常方便。不过大家需要注意的…

帝国调用html标签,帝国CMS使用灵动标签调用tags名称和链接的代码

帝国CMS在调用tags标签时可以使用[showtags]模板标签进行调用&#xff0c;但是其格式和调用数据比较固定&#xff0c;有时候不能满足要求。这时候可以使用比较灵活的loop灵动标签调用更方便。loop标签调用代码如下&#xff1a;[e:loop{"select * from [!db.pre!]enewstags…

Web前端大作业—宠物之家(html+css+javascript)

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

Web前端大作业 HTML+CSS+JS 防天天生鲜官网 9页

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

计算机学pdf,计算机等级考试[学习].pdf

河 北 省 普 通 高 等 学 校2005 年计算机知识和应用能力等级考试一级操作试题 —— D卷一、Windows基本操作(共 10 分)⑴在 Winkt 文件夹下面建立 Exam_D文件夹。⑵在同学考号文件夹范围查找“”文件&#xff0c;并在 Exam_D文件夹建立它的快捷方式&#xff0c;名称为“计算器…