*利用归并排序的思想,时间复杂度为O(logn)
//将数组{1,2,-3,-4,5,6,-1,10}负数调到正数前面,但负数两两之间和正数两两之间顺序不变
public class Sort{
public static void main(String[]args){
int []A={1,2,-3,-4,5,6,-1,10};
sort(A,0,A.length-1);
for(int i=0;i<A.length;i++){
System.out.print(A[i]+" ");
}
}
public static void sort(int []A,int low,int high){
if(low<high){
int mid=(low+high)/2;
sort(A,low,mid);
sort(A,mid+1,high);
merge(A,low,mid,high);
}
}
public static void merge(int []A,int low,int mid,int high){
int []temp=new int[high-low+1];
int h1=low,h2=mid+1,i=0;
while(h1<=mid&&A[h1]<0){
temp[i++]=A[h1++];
}
while(h2<=high&&A[h2]<0){
temp[i++]=A[h2++];
}
while(h1<=mid){
temp[i++]=A[h1++];
}
while(h2<=high){
temp[i++]=A[h2++];
}
i=0;
while(low<=high){
A[low++]=temp[i++];
}
}
}