1.将数组中所有小于等于0的元素放在前半部分,大于0的元素放在后半部分
2.以第一个元素为分界线,将所有大于它的元素移到后边,小于它的元素移到前边
3.快速排序
//将数组中所有小于等于0的元素放在前半部分,大于0的元素放在后半部分
public static void move(int [] arr){
int tm;
int j=0;
for(int i=0;i<arr.length;i++){
if(arr[i]<=0){ //将小于等于0的数存在j开始的数组里
tm=arr[i];
arr[i]=arr[j];
arr[j]=tm;
j++;
}
}
}
//以第一个元素为分界线,将所有大于它的元素移到后边,小于它的元素移到前边--一趟快排
public static void move2(int [] arr){
int tm;
int current=arr[0],i=0,j=arr.length-1;
while(i<j){
while(arr[i]<current) i++; //从左边找到第一个大于current的元素
while(arr[j]>current) j--; //从右边找到第一个小于current的元素
tm=arr[i];
arr[i]=arr[j];
arr[j]=tm;
}
}
//快速排序
public static void move3(int [] arr,int s,int t){
int tm;
int i=s,j=t;
if(s<t){
int current=arr[s];
while(i<j){
while(arr[i]<current) i++; //从左边找到第一个大于current的元素
while(arr[j]>current) j--; //从右边找到第一个小于current的元素
if(i<j){
tm=arr[i];
arr[i]=arr[j];
arr[j]=tm;
}
}
move3(arr,s,i-1);
move3(arr,i+1,t);
}
}