题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
思路:用2个指针,第一个指向第一个数的前面一个,第二个指针指向第一个指针,当第二个指针指向的值为奇数的时候与第一个指针指向的值交换,否则第二个指针加1
//调整数组顺序使奇数位于偶数前面 #include <iostream> using namespace std; void coutstr(int *a,int n) { if (a==nullptr) { return; } int beg=-1; int end=0; while (end<n) { if (*(a+end)%2!=0) { beg=beg+1; swap(*(a+beg),*(a+end)); } end=end+1; } for (int i=0;i<n;++i) { cout<<*(a+i)<<endl; } } int main() { int a[8]={1,2,3,4,5,7,8,9}; coutstr(a,sizeof(a)/sizeof(int)); return 0; }