您好,登錄后才能下訂單哦!
題目:輸入一個整數(shù)數(shù)組,實現(xiàn)一個函數(shù)來調(diào)整該數(shù)組中數(shù)字的順序,使得所有奇數(shù)位于數(shù)組的前半部分,偶數(shù)位于后半部分。
思路:這個題目要求把奇數(shù)放在數(shù)組的前半部分,偶數(shù)放在數(shù)組的后半部分,因此數(shù)組中所有奇數(shù)位于偶數(shù)前面。我們在掃描這個數(shù)組時,遇到偶數(shù)在奇數(shù)前面時可以交換一下它們的順序。因此我們可以定義兩個指針pBengin、pEnd,pBegin指向數(shù)組的首地址,pEnd指向數(shù)組的最后一位,當pBengin指向的數(shù)字為奇數(shù)時,pbengin向后移動,當指向的數(shù)字為偶數(shù)時,先不動。當pEnd指向的數(shù)字為偶數(shù)時不動,奇數(shù)時向前移動。在沒有相遇之前奇數(shù)總數(shù)位于偶數(shù)前面,如果第一個指向的位偶數(shù)第二個指向的為奇數(shù),可以交換這兩個數(shù)字。
代碼:
#include<iostream> using namespace std; void ReorderOddEven(int *arr,int length) { if(arr==NULL|| length==NULL) return; int *pBegin=arr; int *pEnd=arr+length-1; while(pBegin<pEnd) { while(pBegin<pEnd && (*pBegin%2)!=0)//向后移動直到它指向偶數(shù) pBegin++; while(pBegin<pEnd && (*pEnd%2)==0)//向前移動直到它指向奇數(shù) pEnd--; if(pBegin<pEnd) { int tmp=*pBegin; *pBegin=*pEnd; *pEnd=tmp; } } } int main() { int arr[]={1,2,3,4,5,6,7}; int sz=sizeof(arr)/sizeof(arr[0]); ReorderOddEven(arr,sz); for(int i=0;i<sz;i++) { cout<<arr[i]<<' '; } return 0; }
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。