首页 > 代码库 > 《剑指Offer》题目:调整数组顺序使奇数位于偶数前面
《剑指Offer》题目:调整数组顺序使奇数位于偶数前面
题目描述:调整数组顺序使奇数位于偶数前
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
题目分析:
题目的关键在于在移位以后,奇数和奇数以及偶数和偶数之间的相对位置保持不变。
Java代码:
public class ReOrderArray { //这种方法不能保证奇数和奇数,偶数和偶数之间的相对位置不变 public static void reOrderArray(int [] array) { if (array.length == 0 || array.length == 1) return; int p1 = 0; int p2 = array.length-1; int temp = 0; while (p1 < p2){ if (array[p1] %2 == 0){ if (array[p2] % 2 == 0) p2--; else { temp = array[p2]; array[p2] = array [p1]; array[p1] = temp; p1++; p2--; } }else { p1++; } } } //这种方法可以保证奇数和奇数,偶数和偶数之间的相对位置不变 public static void reOrderArray1(int [] array){ if (array.length == 0 || array.length == 1) return; int p1 = 0; int p2 = 1; int temp = 0; while ( p2 < array.length){ //如果p1已经指向了偶数,这时开始向后移动p2,直到p2指向奇数,然后开始交换 if (array[p1] % 2 == 0){ if (array[p2] % 2 == 0){ p2++; }else { //为保证相对位置不变,采用移位 temp = array[p2]; for (int i = p2; i > p1; --i){ array[i] = array[i-1]; } array[p1] = temp; } } //如果p1指向的元素为奇数,p1向后移直到指向偶数,此时p2始终位于p1后面一位 else { p1++; p2 = p1+1; continue; } } } public static void main(String[] args){ int [] arr = new int[]{1,-3,4,-6,8,-9,7}; reOrderArray1(arr); for (int i=0; i<arr.length; ++i){ System.out.print(arr[i]+ " "); } } }
《剑指Offer》题目:调整数组顺序使奇数位于偶数前面
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。