一步一步搞清排序之归并排序(JAVA)
来源:互联网 发布:淘宝特卖女装连衣裙 编辑:程序博客网 时间:2024/05/17 12:56
前言:前面搞定了插入、冒泡、选择···这些磨人的小妖精,这一次的目标是搞定归并排序~归并排序这个东东呢,算法考试中有遇到过,当时并不能完整无误的写出来,学渣属性曝光~~
原理:归并排序是分治法-分而治之最经典的表达。
最基本的思想就是将两个有序的序列合并为一个有序序列。
把一个长度为N的数组,看成N个待合并的序列
第一步做两两合并,得到N/2个有序的序列
接下来两两合并上一步得到的有序序列,得到N/4个有序序列
继续合并···
经过log N 次的归并后,就得到了我们所需要的有序序列~
代码如下:
package zj.com.merge;import java.util.Arrays;public class MergeSort { public void mergeSort(int[] a,int left,int right){ if(left<right) { int mid = (left+right)/2; mergeSort(a, left, mid); mergeSort(a, mid+1, right); merge(a, left, mid, right); } } public void merge(int[] a,int left,int mid,int right){ /*temp作为临时数组顺序存储元素 * newindex 作为临时数组的下标指引 * copyindex 是将该段排序后的元素复制回原数组的指引 * sepindex 是A、B两个数组后一个数组的第一个元素索引*/ int[] temp = new int[a.length]; int newindex = left; int copyindex = left; int sepindex = mid+1; while(left<=mid&&sepindex<=right) { if(a[left]<=a[sepindex]) { //将较小的一个数放入临时数组中 temp[newindex] = a[left]; newindex++; left++; } else { temp[newindex] = a[sepindex]; newindex++; sepindex++; } } //若A、B数组有一个已经全部放入临时数组,则剩下的不用比较直接放入 while(left<=mid) { temp[newindex++] = a[left++]; } while(sepindex<=right) { temp[newindex++] = a[sepindex++]; } //将临时数组中的元素按顺序复制到原数组 while(copyindex<=right) { a[copyindex] = temp[copyindex++]; } } public static void main(String[] args) { // TODO Auto-generated method stub MergeSort m = new MergeSort(); int[] a = {3,2,1,6,5,4,9,8,7,10,12}; m.mergeSort(a, 0, a.length-1); System.out.println(Arrays.toString(a)); }}
0 0
- 一步一步搞清排序之归并排序(JAVA)
- 一步一步搞清排序之冒泡排序(JAVA实现)
- 一步一步搞清排序之插入排序(JAVA)
- 一步一步搞清排序之选择排序(JAVA)
- 一步一步搞清排序之快速排序(JAVA)
- 一步一步搞清排序之堆排序(JAVA)
- Java 排序之 归并排序
- java排序之归并排序
- Java排序之归并排序
- java排序之 --- 归并排序
- java之归并排序
- Java之归并排序
- 排序算法之快速排序、归并排序(java实现)
- 归并排序(Java) @排序
- 数据结构之归并排序(java)
- 归并排序(java)
- (Java)归并排序
- 归并排序(java)
- Tips
- python2和python3共存
- Android APP反编译之开篇与工具
- js instaneceof
- [经验分享]如何将LPCXpresso的仿真器烧录成CMSIS-DAP或JLINK
- 一步一步搞清排序之归并排序(JAVA)
- angularJS --$http请求方式
- 用yum方式安装软件的优势
- Ubuntu 安装 GNU global
- Java***选择排序***
- 接口回调;new FileFilter(接口)重写accept递归深度遍历后缀名文件;File[]和stringbuffer两种方法
- jstl fn使用
- Windows下路径的获取(未完结)
- 论版本号的正确打开方式