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

原创 2015年07月07日 20:52:51

惊恐只完成基本功能的解法

     


void ReorderOddEven(int *pData, unsigned int length)
{
if (pData == NULL || length == 0)
return;
int *pBegin = pData;
int *pEnd = pData + length - 1;
while (pBegin < pEnd)
{
//后面移动pBegin,直到它指向偶数
while (pBegin < pEnd && (*pBegin & 0x1) != 0)
pBegin++;
//向前移动pEnd,直到它指向奇数
while (pBegin < pEnd && (*pEnd & 0X1) == 0)
pEnd--;
if (pBegin < pEnd)
{
int temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp;
}
}
}

得意可扩展性的解法

      如果把题目改成数组中的数按照大小分为两部分,所有负数都在非负数的前面,该怎么做?能被3整除的放在前面,不能被3整除的放在后面。面对这种新问题,其

void Reorder(int *pData, unsigned int length, bool(*func)(int))
{
if (pData == NULL || length == 0)
return;
int *pBegin = pData;
int *pEnd = pData + length - 1;
while (pBegin < pEnd)
{
while (pBegin < pEnd &&!func(*pBegin))
pBegin++;
while (pBegin < pEnd&& func(*pEnd))
pEnd--;
if (pBegin < pEnd)
{
int temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp;
}
}
}
bool isEven(int n)
{
return (n & 1) == 0;
}

isEven是一个具体的标准。

实现代码如下:

void ReorderOddEven(int *pData,unsigned int length)

{

       Reorder(pData,length,isEven);

}



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

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

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

一、问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 二、算法...
  • tanjie_123
  • tanjie_123
  • 2016年11月06日 18:52
  • 930

剑指offer面试题14(Java版):调整数组顺序使奇数位于偶数的前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 1、基本实现: 如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,...
  • jsqfengbao
  • jsqfengbao
  • 2015年08月01日 12:41
  • 3550

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

题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。 方法:设2个头尾指针begin和end, begin...
  • fanzitao
  • fanzitao
  • 2012年08月24日 09:03
  • 2867

JAVA实现调整数组顺序使奇数位于偶数前面问题(《剑指 offer》)

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 pu...
  • qq_15062527
  • qq_15062527
  • 2015年10月02日 15:57
  • 1094

将无序数组中的奇数放在偶数前面

package test; import java.util.Arrays; public class Test2 { //类似快速排序 static void change(int[] a...
  • kangaroo835127729
  • kangaroo835127729
  • 2015年03月10日 20:51
  • 692

经典算法——调整数组顺序使奇数位于偶数前面

一、题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 ...
  • geekmanong
  • geekmanong
  • 2016年03月19日 15:42
  • 1373

调整数组顺序使奇数位于偶数前面[剑指offer]之python实现

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。题目连接时空都是O(...
  • huaxixidongbeishida
  • huaxixidongbeishida
  • 2016年10月18日 10:16
  • 470

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

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

剑指offer 面试题14:调整数组顺序使奇数位于偶数前面(C++版)

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。 思路分析: 可以维护两个指针i和j,i指向数组的第一个数字,它只向后移...
  • Mary19920410
  • Mary19920410
  • 2017年04月12日 10:55
  • 242
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:调整数组顺序使奇数位位于偶数前面
举报原因:
原因补充:

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