题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,偶数位于后半部分。
思路:这个题目要求把奇数放在数组的前半部分,偶数放在数组的后半部分,因此数组中所有奇数位于偶数前面。我们在扫描这个数组时,遇到偶数在奇数前面时可以交换一下它们的顺序。因此我们可以定义两个指针pBengin、pEnd,pBegin指向数组的首地址,pEnd指向数组的最后一位,当pBengin指向的数字为奇数时,pbengin向后移动,当指向的数字为偶数时,先不动。当pEnd指向的数字为偶数时不动,奇数时向前移动。在没有相遇之前奇数总数位于偶数前面,如果第一个指向的位偶数第二个指向的为奇数,可以交换这两个数字。
代码:
#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)//向后移动直到它指向偶数 pBegin++; while(pBegin<pEnd && (*pEnd%2)==0)//向前移动直到它指向奇数 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; }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。