有两篇文章实现的差不多,主要的问题在于变量的命名不明确:
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++];
}
}
}