輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有奇數位于數組的前半部分,所有偶數位于數組的后半部分。
首先,可以想到,用前后兩個指針一個在數組首一個在數組尾同時往數組中間遍歷,當遇到前指針遇到偶數后指針遇到奇數時,就將兩個數交換,直到兩指針相遇或者前指針超過了后指針,這個有點類似快速排序的思想;
程序設計如下:
#include <iostream>
#include <assert.h>
using namespace std;
void AdjustArr(int *parr, size_t size) //調整數組
{
assert(parr && size);
int *start = parr;
int *end = parr+size-1;
while(start < end)
{
while((start < end)&&((*start % 2) != 0))//當start指針遇到偶數停止
++start;
while((start < end)&&((*end % 2) == 0)) //當end指針遇到奇數停止
--end;
if(start < end)//判斷start和end位置
{ swap(*start, *end);
++start;
--end;
}
else
return;
}
}
void PrintArr(int *parr, size_t size) //打印數組
{
assert(parr && size);
for(size_t i = 0; i < size; ++i)
{
cout<<parr[i]<<" ";
}
cout<<endl;
}
int main()
{
int arr[] = {1,5,2,4,6,11,3,8,0,7};
size_t size = sizeof(arr)/sizeof(arr[0]);
PrintArr(arr, size);
AdjustArr(arr, size);
PrintArr(arr, size);
return 0;
}運行程序,結果:

《完》
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。