二路归并算法(参考) Java
2016-10-05 13:33
465 查看
有两篇文章实现的差不多,主要的问题在于变量的命名不明确:
http://blog.csdn.net/middlekingt/article/details/8446552
http://blog.csdn.net/apei830/article/details/6591632
看归并排序算法的实现,主要是为了跟逆序数的实现对比。
package test;
public class MergeSortTest {
public static void main(String[] args){
int[] data = {5,3,6,2,1,9,4,8,7};
for(int i: data)
System.out.print(i +" ");
System.out.println();
mergeSort(data);
System.out.println("排序后的数组 : ");
for(int j:data)
System.out.print(j + " ");
System.out.println();
}
public static void mergeSort(int[] data){
sort(data,0,data.length -1);
}
public static void sort(int[] data, int left, int right){
if(left>=right){
return;
}
int center = (left+right)/2;
sort(data, left, center);
sort(data, center+1, right);
merge(data,left, center, right);
for(int i: data)
System.out.print(i+" ");
System.out.println();
}
public static void merge(int[] data,int left, int center, int right){
int[] tempArr = new int[data.length];
int rightFirstElement = center+1;
int thirdIndex = left;
int leftFirstElement = left;
while(leftFirstElement <= center && rightFirstElement <= right){
if(data[leftFirstElement] <= data[rightFirstElement]){
tempArr[thirdIndex++] = data[leftFirstElement++];
}else{
tempArr[thirdIndex++] = data[rightFirstElement++];
}
}
while(leftFirstElement<=center){
tempArr[thirdIndex++] = data[leftFirstElement++];
}
while(rightFirstElement<=right){
tempArr[thirdIndex++] = data[rightFirstElement++];
}
while(left<=right){
data[left] = tempArr[left++];
}
}
}
http://blog.csdn.net/middlekingt/article/details/8446552
http://blog.csdn.net/apei830/article/details/6591632
看归并排序算法的实现,主要是为了跟逆序数的实现对比。
package test;
public class MergeSortTest {
public static void main(String[] args){
int[] data = {5,3,6,2,1,9,4,8,7};
for(int i: data)
System.out.print(i +" ");
System.out.println();
mergeSort(data);
System.out.println("排序后的数组 : ");
for(int j:data)
System.out.print(j + " ");
System.out.println();
}
public static void mergeSort(int[] data){
sort(data,0,data.length -1);
}
public static void sort(int[] data, int left, int right){
if(left>=right){
return;
}
int center = (left+right)/2;
sort(data, left, center);
sort(data, center+1, right);
merge(data,left, center, right);
for(int i: data)
System.out.print(i+" ");
System.out.println();
}
public static void merge(int[] data,int left, int center, int right){
int[] tempArr = new int[data.length];
int rightFirstElement = center+1;
int thirdIndex = left;
int leftFirstElement = left;
while(leftFirstElement <= center && rightFirstElement <= right){
if(data[leftFirstElement] <= data[rightFirstElement]){
tempArr[thirdIndex++] = data[leftFirstElement++];
}else{
tempArr[thirdIndex++] = data[rightFirstElement++];
}
}
while(leftFirstElement<=center){
tempArr[thirdIndex++] = data[leftFirstElement++];
}
while(rightFirstElement<=right){
tempArr[thirdIndex++] = data[rightFirstElement++];
}
while(left<=right){
data[left] = tempArr[left++];
}
}
}
相关文章推荐
- 二路归并2算法的java实现(普通方法)
- 用友面试题答案 - java归并算法实现
- 二路归并算法非递归C实现
- 隐马尔可夫训练参数,BaumWelch算法,java实现【参考52nlp的博客算法原理实现】
- java实现排序算法之归并排序(2路归并)
- 二路归并排序的java实现
- java归并算法实现
- 二路归并(JAVA实现)
- 二路归并算法用于模块间增量更新
- 二路归并算法的实现方法,用到vector容器
- 归并算法(Java版)
- 二路归并算法(2PMM)--学生管理系统
- MIT:算法导论——1.算法分析——插入排序 vs 二路归并排序
- java实现归并算法
- Java归并算法递归实现
- 二路归并排序的Java实现
- 著名软件公司的java笔试算法题!(含参考答案)
- BP神经网络java实现,按照算法步骤也参考网上相关资源写的,若君有高见,非常欢迎指教
- Java实现的排序算法及比较 [冒泡,选择,插入,归并,希尔,快排]
- 二路归并算法