我们爱面试,一面一学-----微软谷歌面试100题--【54】调整数组顺序使奇数位于偶数前面

来源:互联网 发布:web数据挖掘 pdf 编辑:程序博客网 时间:2024/05/16 09:15

同上一篇,这篇是看来的题目,自面试而已。

题目:调整整数数组中元素的顺序,使所有奇数位于偶数的左面。

这应该算快排的一部分思路:找到一个比较标准,然后从数组两头分别搜索,找到两个不符合的元素后,交换位置。

C代码如下:

#include <stdio.h>#include <conio.h>void swap(int *q, int i, int j){    int temp = q[i];    q[i] = q[j];    q[j] = temp;}/*奇数偶数排序*/void s(int *q, int n){    int i = 0, j = n - 1;    while(i < j)    {        //找到q[j]之前的第一个偶数,包括q[j]         while((i <= j) && (q[i]&1 !=0))        {            ++i;        }        //找到q[i]之后的最后一个奇数,包括q[i]         while((j >= i) && (q[j]&1 ==0))        {            --j;        }         //如果i < j表明仍然有偶数q[i]在奇数q[j]之前,则交换两者         //如果i >= j,则表明所有的奇数都在偶数左面了         if(i < j)        {            swap(q, i ,j);            ++i;            --j;        }            }} int main(){    //要排序的数组     int a[5];     printf("请输入:");    for(int i = 0; i < 5; ++i)    {        scanf("%d", &a[i]);    }     //奇数偶数排序     s(a, 5);    //输出验证     for(int i = 0; i < 5; ++i)    {        printf("\n%d", a[i]);    }    getch();    return 0;}