面试题 14

来源:互联网 发布:济南锋刃网络 编辑:程序博客网 时间:2024/06/06 00:00

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);}
0 0