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

面试题集锦_2

2013-06-08 12:46 197 查看
整型数组int A[nSize],其中隐藏着若干个0,其余非0整数,写一个函数int Func(int *S,int size), 使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)。

#include<stdio.h>
#include<stdlib.h>
int  Func(int a[],int size)
{
int temp;//用于交换数组的临时变量
int count1=0,count2=0;//用于统计0的个数
int    first,first2;//用于记录元素0第一次出现的位置
int    len=0,fu_first;//len用于遍历数组的变量,fu_first用于记录排序后第一个负数出现的位置
for(int i=0;i<size;i++)
{
{
if(a[i]==0)
{
count1++;
if(count1==1)
first=i;
}//判断第一个是否为0
for(int j=i+1;j<size;j++)
if(a[i]<a[j])
{
if(a[j]==0)
{
count1++;
if(count1==1)
first=j;
}
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
while(len<size)
{
if(a[len]==0)
{
count2++;
if(count2==1)
{
first2=len;//再找到排序后元素为0的第一个位置
}
}
if(a[len]<0)
{
fu_first=len;//找到排序好后,第一个元素是负数的位置
break;
}
len++;
}
for(int k1=0;k1<count2;k1++)//移的次数应该是根据0的个数
for(int k2=first2;k2<size-1;k2++)
a[k2]=a[k2+1];//数组往前移,找到第一个0的位置后,数组依次往前移
for(int k3=size-count2;k3<size;k3++)
a[k3]=0;//后面的赋值为0
return first;
}
int main()
{
int a[10]={9,5,3,1,-2,0,-4,6,0,-8};
int result=Func(a,10);
printf("原数据中第一个元素为0的下标:%d\n",result);
for(int i=0;i<10;i++)
{
printf("%d",a[i]);
}
}


View Code
题目涉及到排序,对于不适用辅助空间,考虑效率问题还没有什么好的想法,只是简单地把题目的要求实现,知道还是不够好,不过现在目前还只能做成这样,以后不断改进吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: