博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序:归并排序
阅读量:6715 次
发布时间:2019-06-25

本文共 2388 字,大约阅读时间需要 7 分钟。

hot3.png

        归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。

45a379e04ae18bbc0bcd90ecf40135f3e82.jpg

public static void mergeSort(int[] elements) {	if(null == elements || 1 >= elements.length) {		// do nothing	} else {		int[] temp = new int[elements.length];		sort(elements, 0, elements.length-1, temp);	}}private static void sort(int[] elements,int left,int right,int[] temp) {	if(left < right) {		int mid = (left + right) >> 1;		sort(elements, left, mid, temp);		sort(elements, mid+1, right, temp);		merge(elements,left,mid,right,temp);	}}private static void merge(int[] elements, int left, int mid, int right, int[] temp) {	System.out.println("left="+left+",right="+right+",mid="+mid);	int l = left;// 左数组指针	int r = mid + 1;// 右数组指针	int t = 0;// 临时数组指针	while(l <=mid && r<=right) {		if(elements[l] <= elements[r]) {			temp[t++] = elements[l++];		} else {			temp[t++] = elements[r++];		}	}	// 将左边剩余元素填充进temp中	while(l <= mid) {		temp[t++] = elements[l++];	}	// 将右边剩余元素填充进temp中	while(r <= right) {		temp[t++] = elements[r++];	}	t = 0;	while(left <= right) {		elements[left++] = temp[t++];	}	System.out.println("elements="+Arrays.toString(elements));	System.out.println("------------------------------------------------");}

测试代码:

public static void main(String[] args) {	int[] array = {82 ,31 ,29 ,71, 72, 42, 64, 5, 110};	mergeSort(array);}

结果:

left=0,right=1,mid=0elements=[31, 82, 29, 71, 72, 42, 64, 5, 110]------------------------------------------------left=0,right=2,mid=1elements=[29, 31, 82, 71, 72, 42, 64, 5, 110]------------------------------------------------left=3,right=4,mid=3elements=[29, 31, 82, 71, 72, 42, 64, 5, 110]------------------------------------------------left=0,right=4,mid=2elements=[29, 31, 71, 72, 82, 42, 64, 5, 110]------------------------------------------------left=5,right=6,mid=5elements=[29, 31, 71, 72, 82, 42, 64, 5, 110]------------------------------------------------left=7,right=8,mid=7elements=[29, 31, 71, 72, 82, 42, 64, 5, 110]------------------------------------------------left=5,right=8,mid=6elements=[29, 31, 71, 72, 82, 5, 42, 64, 110]------------------------------------------------left=0,right=8,mid=4elements=[5, 29, 31, 42, 64, 71, 72, 82, 110]------------------------------------------------

 

 

参考博客:https://www.cnblogs.com/chengxiao/p/6194356.html

转载于:https://my.oschina.net/u/3229807/blog/1863049

你可能感兴趣的文章
.NET Framework 源码
查看>>
centos上一键安装jdk、tomcat脚本
查看>>
ArrayList源码分析
查看>>
JS Object的静态方法汇总( 上 )
查看>>
jvm疯狂吞占内存,罪魁祸首是谁?
查看>>
sql server随机函数
查看>>
优朋普乐:OTT正重构电视版图
查看>>
Ubuntu 14.04 LTC 有线网络——网线不识别,灯不亮问题
查看>>
21_css布局2_浮动布局.html
查看>>
DateUtils 单元下的公用函数目录
查看>>
jQuery 练习[二]: 获取对象(1) - 基本选择与层级
查看>>
Sublime Text 2 快捷键用法大全
查看>>
linux非交互式生成秘钥
查看>>
C练习小代码-20151108
查看>>
以太坊RPC接口使用
查看>>
高并发写入mysql的设计
查看>>
用U盘安装debian系统
查看>>
Mac 下得Jmeter 测试
查看>>
SequoiaDB 笔记
查看>>
lduan HyPer-V 网络存储(三)
查看>>