剑指Offer之调整数组使奇数位于偶数前面(题14)

1 /****************************************                                                                                                 
  2     > File Name:test.c
  3     > Author:xiaoxiaohui
  4     > mail:[email protected]
  5     > Created Time:2016年05月26日 星期四 19时15分12秒
  6 ****************************************/
  7 
  8 #include<stdio.h>
  9 #include<assert.h>
 10 
 11 void Adjust(int *array, int size)
 12 {
 13     assert(array);
 14     assert(size > 0);
 15 
 16     int* left = arrar;
 17     int* right = arrar[size - 1];
 18 
 19     while(right > left)
 20     {
 21         if( ((*left) & 1) == 0)    //左边为偶数
 22         {
 23             if( ((*right) & 1) == 1)  //右边为奇数
 24             {
 25                 swap(*left, *right);
 26                 left++;
 27                 right--;
 28             }
 29             else
 30             {
 31                 right--;
 32             }
 33         }
 34         else      //如果左边不为偶数,则left++
 35         {
 36             left++;
 37         }
 38     }
 39 }
时间: 2024-12-13 13:21:44

剑指Offer之调整数组使奇数位于偶数前面(题14)的相关文章

调整数组使奇数位于偶数前面

如果考虑暴力解决的话,就每次从前往后扫面,遇到偶数就放在最后,这样时间复杂度就是O(n*n),对于这种问题明显过高了,我们考虑扫描一遍,用两个指针,一个从前往后,另一个从后往前,碰到前偶后奇的时候就交换,这样算法复杂度只有O(n). #include<stdio.h> #include<stdlib.h> void reset(int a[],int n) { int i=0,j=n-1,tmp=0; while(i<j) { if((a[i]%2==1)&&

剑指offer---调整数组顺序使奇数位于偶数前面

class Solution { public: void reOrderArray(vector<int> &array) //加个&表示引用 { int array_size = array.size(); //int xiabiao = (array_size - 1); vector<int> brray; for (int i = 0; i < array_size; ++i) { brray.push_back(array[i]); } int i

剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)

题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输入文件包含一组测试案例.对于每个测试案例,第一行输入一个n,代表该数组中数字的个数.接下来的一行输入n个整数.代表数组中的n个数. 输出: 对应每个测试案例,输入一行n个数字,代表调整后的数组.注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格. 样例输入: 5 1 2 3 4 5 样例输

【剑指offer】调整数组顺序

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25829395 剑指offer上的第14题,九度OJ为了确保输出的结果的唯一性,在输出上做了修改,因此采用的方法自然与书本上不同,这里没有限制,思来想去还是用最简单的方法来做了,非常简单的方法,直接上代码. 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.

剑指offer之调整数组顺序使奇数位于偶数前面

题目要求: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 解题方法: 方法一:时间复杂度O(n^2) 最容易想到:从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位.挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位: 方法二:时间复杂度O(n) 重新建立一个向量,然后进行两次扫描:第一次扫描奇数,第二次扫描偶数,完毕,不

【剑指offer】调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 思路:要想原有的次序相对不变,只能相邻交换或顺次移动.冒泡排序:一发现相邻的两个,前一个是偶数,后一个是奇数,则交换. public class ReOrderArrayClass { public void reOrderArray(int[] array) { for (int i = 0; i < array.l

剑指Offer 13. 调整数组顺序使奇数位于偶数前面 (数组)

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目地址 https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?tpId=13&tqId=11166&rp=3&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-inter

剑指 Offer——13. 调整数组顺序使奇数位于偶数前面

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.这和书本不太一样. 解题思路 复制出一个新的数组 copy[ ],然后统计出数组奇数个数,作为新的偶数的起始索引,再设置一个奇数的索引(0),遍历复制的新数组,维护两个指针,按奇数偶数分别插入. public void reOrderArray(int[] nums) { // 奇数个数 int oddCnt = 0;

剑指offer-调整数组顺序使奇数位与偶数前面

题目描述 输入一个整数数组,实现一个函数调整该数组中数字的顺序,使得数组中所有奇数位于数组的前半部分 ,所有偶数位于数组的后半部分. 1.奇数和奇数,偶数和偶数之间的相对位置改变. public class Test { public static void main(String[] args) { int[] array = { 2, 4, 5, 8, 1, 3, 7, 0}; Test.reOrderArray(array); for(int i=0; i<array.length; i+