调整数组(奇数位为奇数,偶数位为偶数)

本题为百度内推面试题
给一个数组,让数组的奇数位(1,3,5,7…)上放奇数,让数组的偶数位(0,2,4,6,…)上放偶数。

我的思想:
给两个指针,i=0,j=1。用这两个指针来监控数字的奇偶。如果arr[i]是偶数,那么这个位置不变,跳向下一个偶数位i+=2。如果arr[j]是奇数,那么这个位置不变,跳向下一个奇数位j+=2。如果(i < len&&j < len) 说明偶数位为奇数,奇数位为偶数,那么就将这两个位置的元素交换。

class Solution {
public:
void oddInOddEvenInEven(vector<int>& arr, int len){
	 int i = 0;
	 int j = 1;
	 while (i < len&&j < len)
 {
 	while (i < len&&arr[i] % 2 == 0)	//判断arr[i]是否为偶数
   	i += 2;
  	while (j < len&&arr[j] % 2 == 1)	//判断arr[j]是否为奇数
  	j += 2;
 	if (i < len&&j < len)
      {
  	// swap(arr[i],arr[j]);
 	  int temp = arr[i];
  	  arr[i] = arr[j];
 	  arr[j] = temp;  
      }
 }
}
};
int main()
{
 Solution s;
 vector<int> arr;
 int a = 0;
 while(cin >> a)
 {  
  	arr.push_back(a);
  	if (cin.get() == '\n')//如果是回车符则跳出循环
  	break;
 }
 int len = arr.size();
 s.oddInOddEvenInEven(arr,len);
 for (vector<int>::iterator itr = arr.begin(); itr != arr.end(); ++itr)
    {
        cout << *itr <<" ";
    }
 system("pause");
 return 0;
}

程序运行及结果:
在这里插入图片描述


版权声明:本文为qq_40704847原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。