数组奇数左边偶数右边位置不变
代码如下:自己看吧
public class TestOdd {
public static void reOrderArray(int [] array) {
int[] tempArr = new int[array.length];
int j = 0;
for(int i=0; i<array.length; i++) {
if ( (array[i] % 2) != 0) {
tempArr[j++]=array[i];
}
}
for(int i=0; i<array.length; i++) {
if ((array[i]%2)==0) {
tempArr[j++]=array[i];
}
}
int k = 0;
while(k<array.length) {
array[k]=tempArr[k];
k++;
}
}
public static void main(String[] args) {
int[] array = {1,3,5,2,56,62,7,28,9};
reOrderArray(array);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
}
结果:
聊聊快排吧,这个有点类似快排的感觉
1、外面的大while条件是left<right
2、两个指针 一个左边 一个右边
3、如果两个指针所属的 值都属性是一样 (都是偶数 都是奇数)
4、来个while 根据实际情况移动下指针 移动到值属性不一样为止
5、不一样时候 判断如果左边是偶数 右边是奇数的情况下 需要swap
但是如果这么玩儿的话肯定是 顺序不满足:看我的代码思路实现:
public class Test1 {
public static void reOrderArray(int[] array) {
int left = 0;
int right = array.length - 1;
while (left < right) {
while (array[left]%2 !=0 && array[right]%2 !=0){ //都是奇数 移动左边 匹配到可以交换为之
left++;
}
while(array[left]%2 == 0 && array[right]%2 ==0){ //都是偶数 移动右边 匹配到可以交换为之
right--;
}
if (array[left]%2==0 && array[right]%2 !=0){
swamp(left,right,array);
}
left++;
right--;
}
}
public static void swamp(int left, int right, int[] arr) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
reOrderArray(array);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
}
实现结果是这样: 保证左右的奇数偶数属性 但是不能保证顺序
所以我采取下面的策略:
双指针
第一个去移动,移动到 偶数为止
第二个去寻找,寻找到奇数 与之交互
public class Test2 {
public static void sortOdd(int[] arr){
int left=0;
int right=1;
while (right<arr.length && left<arr.length){
if (arr[left]%2 == 0){ //当前为偶数
while (right < arr.length-1 && arr[right]%2 ==0 ){ //用right去寻找奇数 注意这里一定要判断下right下表的值 才可以继续往下进行 否则数组没有下标 直接越界啊
right++;
}
swamp(left,right,arr);
left++;
right=left+1;
}
//如果当前为奇数 移动当前位置 移动到偶数为之
while (arr[left]%2 !=0 ){ //奇数就对了 继续往后遍历
left++;
right=left+1;
}
}
}
public static void swamp(int left, int right, int[] arr) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7,8,9};
sortOdd(array);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
}