拆分一个数组的奇偶数

    今天上午电话面试,面试官想测试一下我的算法怎么样,给我出了一个拆分数组奇偶数的题目(估计面试官是当时零时想的吧)。
题目描述:有一个整型数组,请把所有的奇数放在前部分,所有的偶数放在后半部分。
算法描述:面试之前,我刚看了快速排序的算法,脑子里一直留有这个映像,一听题目,我就把这个题目和快速排序结合在了一起,仔细一想,这个题目似乎比快速排序更简单些,快速排序的话,需要多趟,但是这个题目只需要一趟就可以完成了。模仿快速排序的算法,设置一个low和high下标,开始的时候low=0,high=N-1,然后从low位置从前往后开始,找到第一个不是奇数(也就是偶数)的的下标,再从high位置从后向前走,找到第一个不是偶数(也就是奇数)的下标,交换找到的这两个数据,循环这样的操作,直至low>=high为止。
程序实现:
    • #include <stdio.h>

    • #define N 10

    • int main()
    • {
    •     int a[N] = {8, 7, 1, 9, 2, 5, 5, 19, 25, 98};
    •     int i, tmp, index, low, high;

    •     low = 0;
    •     high = N-1;

    •     for(i=0; i < N-1; i++) {
    •         printf("%d ", a[i]);
    •     }
    •     printf("\n");

    •     while(low < high) {
    •         i = low;
    •         while(a[i]%2 != 0) {
    •             low++;
    •             i = low;
    •         }
    •         index = i;
    •         i = high;
    •         while(a[i]%2 == 0) {
    •             high--;
    •             i = high;
    •         }
    •         /*如果不是这个的话,应该退出循环了*/
    •         if(low < high) {
    •             tmp = a[index];
    •             a[index] = a[i];
    •             a[i] = tmp;
    •         }
    •     }

    •     for(i=0; i < N-1; i++) {
    •         printf("%d ", a[i]);
    •     }
    •     printf("\n");
    •     return 0;
    • }
运行结果:
    • 8 7 1 9 2 5 5 19 25
    • 25 7 1 9 19 5 5 2 8


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(2301) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值