这篇文章主要介绍“java归并排序算法的原理和作用”,在日常操作中,相信很多人在java归并排序算法的原理和作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java归并排序算法的原理和作用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
归并排序是一种概念上最简单的排序算法,与快速排序一样,归并排序也是基于分治法的。归并排序将待排序的元素序列分 成两个长度相等的子序列,为每一个子序列排序,然后再将他们合并成一个子序列。合并两个子序列的过程也就是两路归并。
图解(摘自网络)
public class TestController {
public static void main(String[] args) {
int[] a = { 49, 38, 65, 97, 76, 13, 27, 50 };
mergeSort(a, 0, a.length-1);
System.out.println("排好序的数组:" + Arrays.toString(a));
}
public static void mergeSort(int [] a,int start,int end){
// 当子序列中只有一个元素时结束递归
if(start<end){
// 划分子序列
int mid=(start+end)/2;
// 对左侧子序列进行递归排序
mergeSort(a, start, mid);
// 对右侧子序列进行递归排序
mergeSort(a, mid+1, end);
// 合并
merge(a, start, mid, end);
}
}
//两路归并算法,两个排好序的子序列合并为一个子序列
public static void merge(int []a,int left,int mid,int right){
// 辅助数组
int []tmp=new int[a.length];
// p1、p2是检测指针,k是存放指针
int p1=left,p2=mid+1,k=left;
while(p1<=mid && p2<=right){
if(a[p1]<=a[p2])
tmp[k++]=a[p1++];
else
tmp[k++]=a[p2++];
}
// 如果第一个序列未检测完,直接将后面所有元素加到合并的序列中
while(p1<=mid) {
tmp[k++]=a[p1++];
}
// 如果第一个序列未检测完,直接将后面所有元素加到合并的序列中
while(p2<=right) {
tmp[k++]=a[p2++];
}
// 复制回原素组
for (int i = left; i <=right; i++) {
a[i]=tmp[i];
}
}
}
排好序的数组:[13, 27, 38, 49, 50, 65, 76, 97]
到此,关于“java归并排序算法的原理和作用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/mdxlcj/blog/3119185