
本题有一种快速排序的感觉,和快速排序不同的是,快速排序 要自己定义一个 标记值 ,最后还有进行 左右两边的继续排序 
而本题则远没有这么麻烦
只需要定义,左右 指针,依次往中间靠拢,最后不断交换 即可
代码如下
/**
*
*/
/***
* @author 18071
* @Date 2019年2月28日
* 功能: 调整数组,使奇数再前,偶数再后
***/
public class test {
public static void main(String args[]) {
int[] x= {1,2,4,3,4,5,7,8,6,3};
sort(x);
for(int i=0;i<x.length;i++)
{
System.out.println(x[i]);
}
}
public static void sort(int [] x ) {
int l=0;
int r=x.length-1;
while(l!=r&& l<=r) {
System.out.println("now l is " +l);
while(x[l]%2!=0) {
l++;//不是偶数,向后移动 直到停在偶数的位置上
}
System.out.println("now r is " +r);
while(x[r]%2==0) {
r--;//不是奇数 ,向左移动 ,直到停在 奇数的位置上
}
int temp=x[l];
x[l]=x[r];
x[r]=temp;
l++;
r--;
}
}
}
结果如右图

此时,在这里回顾 快排
public static void quickSort(int[] arr,int low,int high){
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
//temp就是基准位
temp = arr[low];
while (i<j) {
//先看右边,依次往左递减
while (temp<=arr[j]&&i<j) {
j--;
}
//再看左边,依次往右递增
while (temp>=arr[i]&&i<j) {
i++;
}
//如果满足条件则交换
if (i<j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
//最后将基准为与i和j相等位置的数字交换
arr[low] = arr[i];
arr[i] = temp;
quickSort(arr, low, j-1);
quickSort(arr, j+1, high);
}
本文介绍了一种类似于快速排序的算法,用于调整数组使奇数元素位于偶数元素之前。通过定义左右指针,该算法在一次遍历中完成排序,无需额外的标记值或后续的左右子数组排序。
1380

被折叠的 条评论
为什么被折叠?



