C语言:调整数组使奇数全部都位于偶数前面。

原创 2016年05月30日 17:15:24
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>


void even_old_number(int *arr, int len)
{
     assert(arr);
     int i = 0;
     int j = 0;
     int tmp = 0;
     for (i = 0; i < len; i++)
     {
          while ((arr[i] % 2 == 0) && (i < len))
          {
               i++;
          }
          while ((arr[j] % 2 == 1) && (j < len))
          {
               j++;
          }
          if (i == len || j == len)
               return;
          if (i > j)
          {
               tmp = arr[i];
               arr[i] = arr[j];
               arr[j] = tmp;
               tmp = i;
               i = j;
               j = tmp;
          }
     }
}



int main()
{
     int arr[] = { 1, 2, 3, 4, 5 };
     int len = sizeof(arr) / sizeof(arr[0]);
     
     even_old_number(arr, len);
     int i = 0;
     for (i = 0; i < len; i++)
     {
          printf("%d ", arr[i]);
     }
     system("pause");
     return 0;
}

另外,方法2也可以,

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

void even_odd(int *arr, int len)
{
    int left = 0;
    int right = len - 1;
    while (left < right)
    {
        while((left < right) && (arr[left] % 2 == 1))
        {
            left++;
        }
        while((left < right) && (arr[right] % 2 != 1))
        {
            right--;
        }
        if (left < right)
        {
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
            left++;
            right--;
        }
    }
}


int main()
{
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int i = 0;
    int len = sizeof(arr) / sizeof(arr[0]);
    even_odd(arr, len);
    for (i = 0; i < len; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    system("pause");
    return 0;
}


输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分

题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。  分析:如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组...
  • yeepom
  • yeepom
  • 2013年03月16日 23:17
  • 7258

剑指Offer:面试题14——调整数组顺序使奇数位于偶数前面(java实现)

问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 思路: 1.最简单的想法,不考虑时间复杂度,扫描数组,遇到偶数,...
  • lilianforever
  • lilianforever
  • 2016年07月06日 15:29
  • 1142

将数组中元素排列为奇数在前偶数在后

处理策略是定义两个指针pHead,pTail并令其初始指向数组头节点和尾节点。pHead从前往后找应该放在尾部的偶数节点,pTail从后往前找应该放在头部的奇数节点,若pHead位于pTail之前则交...
  • u010033948
  • u010033948
  • 2016年03月31日 11:58
  • 1682

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

题目:输入一个整数数组,实现一个函数调整数组的元素顺序,使得奇数位于偶数的前半部分,偶数位于数组的后半部分。 对于这个问题,最直接的办法就是遍历这个数组,如果是奇数就往后遍历,如果是偶数,则将后面所...
  • andamajing
  • andamajing
  • 2013年05月22日 15:09
  • 1412

牛客网刷题之调整数组顺序使奇数位于偶数前面

题目描述:解题思路:  如果是强解的话,就可以从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字都往前挪动一位,这种解法显然是O(n^2)的,不用想都知道,这不可能通过测...
  • lks1139230294
  • lks1139230294
  • 2016年10月08日 23:01
  • 573

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

题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。    如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每碰到一个...
  • abc7845129630
  • abc7845129630
  • 2016年10月02日 18:43
  • 360

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

只完成基本功能的解法       void ReorderOddEven(int *pData, unsigned int length) { if (pData == NULL ...
  • wangfengfan1
  • wangfengfan1
  • 2015年07月07日 20:52
  • 528

调整数组顺序使得奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。 代码: /* 调整数组顺序使得奇数位于偶数前面 by Ro...
  • RowandJJ
  • RowandJJ
  • 2014年08月01日 12:58
  • 905

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

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:拿到这一题,我...
  • sushauai
  • sushauai
  • 2016年04月21日 21:47
  • 215

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

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 第一个思路:类...
  • wl_ss
  • wl_ss
  • 2017年12月26日 22:24
  • 28
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言:调整数组使奇数全部都位于偶数前面。
举报原因:
原因补充:

(最多只允许输入30个字)