数组奇数左边偶数右边位置不变
代码如下:自己看吧
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] + " "); } } }