題目描述
輸入一個(gè)整數(shù)數(shù)組,實(shí)現(xiàn)一個(gè)函數(shù)來(lái)調(diào)整該數(shù)組中數(shù)字的順序,使得所有奇數(shù)位于數(shù)組的前半部分,所有偶數(shù)位于數(shù)組的后半部分。
示例:
輸入:nums = [1,2,3,4]
輸出:[1,3,2,4]
注:[3,1,2,4] 也是正確的答案之一。
提示:
1 <= nums.length <= 50000
1 <= nums[i] <= 10000
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof
解題思路
采用雙指針?lè)?,一個(gè)從頭到尾,一個(gè)從尾到頭遍歷,當(dāng)遍歷到的前面元素為偶數(shù)且遍歷到的后面元素為奇數(shù)時(shí),將兩者互換。
代碼
bool IsEven(int number)
{
return (!(number & 1));
}
int* exchange(int* nums, int numsSize, int* returnSize){
int index1 = 0, index2 = numsSize - 1;
while(index1 < index2)
{
while((index1 < index2) && (!IsEven(nums[index1])))
index1++;
while((index1 < index2) && (IsEven(nums[index2])))
index2--;
if(index1 < index2)
{
int temp = nums[index1];
nums[index1] = nums[index2];
nums[index2] = temp;
}
}
*returnSize = numsSize;
return nums;
}
測(cè)試代碼及結(jié)果
#include<stdio.h>
#include<stdbool.h>
int *exchange(int *nums, int numsSize, int *returnSize);
void PrintTest(int nums[], int length)
{
for (int i = 0; i < length; i++)
{
printf("%d ", nums[i]);
}
printf("\n");
}
void Test1()
{
int return_size;
int nums[] = {1, 2, 3, 4, 5, 6, 7};
PrintTest(exchange(nums, sizeof(nums) / sizeof(int), &return_size), sizeof(nums) / sizeof(int));
}
void Test2()
{
int return_size;
int nums[] = {2, 4, 6, 8, 1, 3, 5, 7};
PrintTest(exchange(nums, sizeof(nums) / sizeof(int), &return_size), sizeof(nums) / sizeof(int));
}
void Test3()
{
int return_size;
int nums[] = {1, 3, 5, 7, 4, 6, 2, 8};
PrintTest(exchange(nums, sizeof(nums) / sizeof(int), &return_size), sizeof(nums) / sizeof(int));
}
void Test4()
{
int return_size;
PrintTest(exchange((int *)NULL, 0, &return_size), 0);
}
void Test5()
{
int return_size;
int nums[] = {8};
PrintTest(exchange(nums, sizeof(nums) / sizeof(int), &return_size), sizeof(nums) / sizeof(int));
}
int main(int argc, char* argv[])
{
// 功能測(cè)試
Test1(); // 奇數(shù)偶數(shù)交替出現(xiàn)
Test2(); // 所有偶數(shù)都在奇數(shù)前面
Test3(); // 所有奇數(shù)都在偶數(shù)前面
Test4(); // 輸入NULL指針
Test5(); // 數(shù)組中只有一個(gè)元素
return 0;
}
執(zhí)行結(jié)果
