调整数组中数字的顺序,使得所有奇数位于数组的前半部分
// 题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,
// 所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
代码如下:
// oushu.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"// // 题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,// 所有偶数位于数组的后半部分。要求时间复杂度为O(n)。#include <iostream>using namespace std;void swap(int *a,int i,int j){int temp = *(a+i);*(a+i) = *(a+j);*(a+j) = temp;}void partition(int a[], int n) {int i=0,j=0; //i为遍历指针,j为指向第一个偶数的位置while(i<n && (a[i] & 1) == 0) i++;//n&1 == 0则为偶数,等于1为奇数if(i == n) return ;swap(a,i++,j++);while(i < n ){if((a[i] &1 ) == 1)swap(a,i,j++);i++;}}int main(){int a[] = {2,6,1,4,23};int len = sizeof(a)/sizeof(int);partition(a,len);for (int i=0;i<len;i++){if(i<len-1)cout<<a[i]<<",";else cout<<a[i]<<endl;}system("pause");return 0;}