您的位置:首页 > 职场人生

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

2016-07-05 14:43 417 查看
设置两个指针,分别指向数组的头和尾,交换奇偶

注意几点:

while循环中一定要加上start < end,不然有出边界的可能

判断奇偶可以用位运算效率更高 & 0x1

我的代码:

void ReorderOddEven_1(int *pData, unsigned int length)
{
if (pData == NULL || length <= 0)
return;
int start = 0;
int end = length - 1;
while (start < end)
{
while (start < end && pData[start] % 2 != 0)
start++;
while (start < end && pData[end] % 2 == 0)
end--;
if (start < end)
{
int temp = pData[start];
pData[start] = pData[end];
pData[end] = temp;
}
}
}


示例代码:

void ReorderOddEven_1(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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: