面试题集锦_2
2013-06-08 12:46
197 查看
整型数组int A[nSize],其中隐藏着若干个0,其余非0整数,写一个函数int Func(int *S,int size), 使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)。
View Code
题目涉及到排序,对于不适用辅助空间,考虑效率问题还没有什么好的想法,只是简单地把题目的要求实现,知道还是不够好,不过现在目前还只能做成这样,以后不断改进吧。
#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
题目涉及到排序,对于不适用辅助空间,考虑效率问题还没有什么好的想法,只是简单地把题目的要求实现,知道还是不够好,不过现在目前还只能做成这样,以后不断改进吧。
相关文章推荐
- CSDN论坛面试经验和面试题集锦
- [分类整理II]微软等100题系列V0.1版:链表面试题集锦
- [分类整理III]微软等100题系列V0.1版之三:栈、堆、队列面试题集锦
- .NET面试题集锦
- [分类整理IV]微软等100题系列V0.1版:字符串+数组面试题集锦
- 笔试面试题集锦
- 面试题集锦
- .net面试题集锦
- java程序面试题集锦,果断收藏学习
- 海量数据处理面试题集锦
- SQL经典面试题集锦
- 阿里巴巴面试题集锦
- Android面试题集锦(一)
- JDBC常见面试题集锦
- java面试题集锦
- JDBC常见面试题集锦(二)
- JDBC常见面试题集锦(二)
- 各大公司面试题集锦
- C#、.Net经典面试题集锦(二)
- JDBC常见面试题集锦