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

面试题 14

2015-09-07 13:46 323 查看

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