您的位置:首页 > 其它

将数组中负数调到正数之前,但相对位置不变

2016-05-17 22:14 344 查看
*利用归并排序的思想,时间复杂度为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++];
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: