您的位置:首页 > 职场人生

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

2012-09-28 19:29 696 查看
同上一篇,这篇是看来的题目,自面试而已。

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

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

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐