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

设置两个指针,分别指向数组的头和尾,交换奇偶

注意几点:

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

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

我的代码:

 1 void ReorderOddEven_1(int *pData, unsigned int length)
 2 {
 3     if (pData == NULL || length <= 0)
 4         return;
 5     int start = 0;
 6     int end = length - 1;
 7     while (start < end)
 8     {
 9         while (start < end && pData[start] % 2 != 0)
10             start++;
11         while (start < end && pData[end] % 2 == 0)
12             end--;
13         if (start < end)
14         {
15             int temp = pData[start];
16             pData[start] = pData[end];
17             pData[end] = temp;
18         }
19     }
20 }

 示例代码:

 1 void ReorderOddEven_1(int *pData, unsigned int length)
 2 {
 3     if(pData == NULL || length == 0)
 4         return;
 5 
 6     int *pBegin = pData;
 7     int *pEnd = pData + length - 1;
 8 
 9     while(pBegin < pEnd)
10     {
11         // 向后移动pBegin,直到它指向偶数
12         while(pBegin < pEnd && (*pBegin & 0x1) != 0)
13             pBegin ++;
14 
15         // 向前移动pEnd,直到它指向奇数
16         while(pBegin < pEnd && (*pEnd & 0x1) == 0)
17             pEnd --;
18 
19         if(pBegin < pEnd)
20         {
21             int temp = *pBegin;
22             *pBegin = *pEnd;
23             *pEnd = temp;
24         }
25     }
26 }
原文地址:https://www.cnblogs.com/raichen/p/5642875.html