H面试(24):调整数组顺序使奇数位于偶数前面

来源:互联网 发布:2016网络大电影排行 编辑:程序博客网 时间:2024/06/05 19:25

题目:输入一个数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数

位于数组的后半部分,要求时间复杂度为O(n).


#include <assert.h>  #include <stdio.h> void swap (int * a , int *b)  //交换两个数字{     int temp; temp = *a; *a = *b; *b = temp;}void push_odd_before_even(int * a ,int n){   assert(a);int * begin = &a[0];  //指向数组首元素    int * end = &a[n-1];  //指向数组末尾元素for (int i = 0; i < n; i++ ){if((*begin & 1)&&(begin!=end)) //是奇数就移到下一位,直接跳到下一循环{     begin++;   continue;   }else  //是偶数就放到最后去{   swap(begin, end);              *end--;}}}int main( ){int a[ ] = {1,5,3,9};int n = sizeof(a)/sizeof(int);    push_odd_before_even(a,n);for (int i=0; i<n; i++){printf("%d ", a[i]);}return 0;}





原创粉丝点击