您的位置:首页 > 编程语言 > Java开发

二路归并算法(参考) 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++];
}
}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAVA 算法 排序算法