这篇文章主要介绍“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归并排序算法的原理和作用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。