java实现归并算法
2014-05-05 23:26
411 查看
package mydata; public class MyMergeSort { /** * * 1.递归拆分 * 2.合并 * 归并排序 先将初始的序列表看成是n个长度为1的有序表 * (1)定义指针i,指向第一个序列表的第一个元素 * (2)定义指针j,指向第二个序列表的第一个元素 * (3)比较i,j指向的元素大小,若前者大,将后者插入到新表中 否则,把前者插入到后表中 * (4)直到取完第一个序列表或者第二个序列表为止 * * @param args */ public static void main(String[] args) { int[] data = { 20, 37, 49, 28 }; int result[] = new int[data.length]; result = chaifen(data,0,data.length-1,result); for(int i = 0;i<result.length;i++){ System.out.print(result[i] + " "); } } //拆分 public static int[] chaifen(int[] data,int start,int end,int[] result){ int[] temp = new int[end+1]; if(start == end){ result[start] = data[start]; }else{ int mid = (start + end) / 2; chaifen(data,start,mid,temp);//左半部分递归调用 chaifen(data,mid+1,end,temp);//右半部分递归调用 hebing(temp,start,mid,end,result);//temp是你要合并的数组,然后将合并的数组放到result中 } return result; } //合并 private static void hebing(int[] temp, int start, int mid, int end,int[] result) { int start1 = start; int end1 = mid; int start2 = mid + 1; int end2 = end; int index = start; while(start1 <= end1 && start2 <= end2){ if(temp[start1] < temp[start2]){ result[index] = temp[start1]; index++; start1++; }else{ result[index] = temp[start2]; index++; start2++; } } while(start1<=end1){ result[index++] = temp[start1++]; } while(start2<=end2){ result[index++] = temp[start2++]; } } }
相关文章推荐
- java实现归并算法
- 二路归并2算法的java实现(普通方法)
- java归并算法实现
- Java归并算法递归实现
- 通用类型的两路归并算法实现(一)-Java中int型归并排序的实现
- Java实现的排序算法及比较 [冒泡,选择,插入,归并,希尔,快排]
- 算法系列(四)归并排序及其改进(java实现)
- java实现排序算法之归并排序(2路归并)
- 8大内部排序算法学习笔记--(4)归并、基数排序 Java实现
- 归并算法的Java实现
- 用友面试题答案 - java归并算法实现
- 归并算法(java 语言实现)
- 【算法与数据结构】冒泡、插入、归并、堆排序、快速排序的Java实现代码
- 算法-Java实现归并排序
- Java实现七大算法(插入\希尔\选择\堆排\冒泡\快排\归并)
- 算法入门---java语言实现的归并排序小结
- 【算法】归并排序的java实现
- 优先队列实现n路归并算法O(n * lgK)
- 【LeetCode-面试算法经典-Java实现】【056-Merge Intervals(区间合并)】
- YYMMDD转换成4位字符压缩表示算法java实现——应用各位不等进制的思想