面试题 14

1 题目描述

输入一个数组,实现一个函数来调整数组中数字的顺序,使得所有的奇数位于数组的前面,所有偶数位于数组的后半部分。


2 算法描述

设置一个头指针和一个尾指针,头指针不断向后移动,直到遇到偶数,尾指针不断向前移动,直到遇到奇数,交换头指针和尾指针的数据,继续循环上述操作,直达头指针与尾指针交错。这个算法有点像快速排序中 partition 操作


3 c 语言实现

#include<stdio.h>
void reorderOddEven(int  *data,int len){
    int *head=data;
    int *rear=data+(len-1);
    int temp;
    if(data=NULL||len<=0) return;
    while(head<rear){
       while(head<rear&&(*head&1)==1)head++;
       while(head<rear&&(*rear&1)==0)rear--;
       if(head<rear){
          temp=*head;
          *head=*rear;
          *rear=temp;
       }
    }
}
void show(int *data,int len){
   if(data==NULL||len<=0) return;
   int i;
   for(i=0;i<len;i++){
       printf("%d",data[i]);
   }
}

void main(){
    int a[]={1,2,3,4,5,6,7,8,9,10};
    reorderOddEven(a,10);
    show(a,10);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值