归并排序
public class MergeSort {
public static void main(String args[]){
int a[]={7,5,6,4,9,8,12,45,1};
mergeSort(a);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
public static void mergearray(int a[],int first,int mid,int last,int temp[]){
int i=first;
int j=mid+1;
int m=mid;
int n=last;
int k=0;
while(i<=m &&j<=n){
if(a[i]>a[j]){
temp[k++]=a[j++];
}else{
temp[k++]=a[i++];
}
}
while(i<=m){
temp[k++]=a[i++];
}
while(j<=n){
temp[k++]=a[j++];
}
for(i=0;i<k;i++){
a[first+i]=temp[i];
}
}
public static void mergesort(int a[],int first,int last,int temp[]){
if(first<last){
int mid=(first+last)/2;
mergesort(a,first,mid,temp);
mergesort(a,mid+1,last,temp);
mergearray(a, first, mid, last, temp);
}
}
public static void mergeSort(int a[]){
int p[]=new int[a.length];
mergesort(a,0,a.length-1,p);
}
}
数组中的逆序对
public class InversePairs1 {
static int count=0;
public static void main(String[] args) {
int data[]={7,5,6,4};
mergeSort(data);
for(int i=0;i<data.length;i++){
System.out.print(data[i]+" ");
}
System.out.println();
System.out.println(count);
}
public static void mergearray(int a[],int first,int mid,int last,int temp[]){
int i=first;
int j=mid+1;
int m=mid;
int n=last;
int k=0;
while(i<=m &&j<=n){
if(a[i]>a[j]){
temp[k++]=a[j++];
count += mid-i+1;
}else{
temp[k++]=a[i++];
}
}
while(i<=m){
temp[k++]=a[i++];
}
while(j<=n){
temp[k++]=a[j++];
}
for(i=0;i<k;i++){
a[first+i]=temp[i];
}
}
public static void mergesort(int a[],int first,int last,int temp[]){
if(first<last){
int mid=(first+last)/2;
mergesort(a,first,mid,temp);
mergesort(a,mid+1,last,temp);
mergearray(a, first, mid, last, temp);
}
}
public static void mergeSort(int a[]){
int p[]=new int[a.length];
mergesort(a,0,a.length-1,p);
}
}