int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至后面
来源:互联网 发布:好一点的耳环品牌 知乎 编辑:程序博客网 时间:2024/05/17 20:27
int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A,int nSize),使A把0移至后面,非0整数移至数组前面并保持有序(按原来顺序),返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)
这是网友给的程序:
#include<iostream>#define nsize 18using namespace std;int func(int *A,int Nsize);int func(int *A,int Nsize){int i,k,t=1,flag=0;for(i=0;i<Nsize-1;i++){ if(A[i]==0&&flag==0) { k=i;//记录第一个零的下标 flag=1; } if(A[i]==0&&A[i+1]!=0) { A[i+1-t]=A[i+1]; A[i+1]=0; } else if(A[i]==0&&A[i+1]==0) { t++;//记录0的个数 }}return k;}int main(){int a[nsize]={1,2,3,4,0,5,7,0,7,5,3,2,0,234,3,0,2,4};cout<<func(a,nsize)<<endl;for(int i=0;i<nsize;i++) cout<<a[i]<<" ";return 0;}
这是我写的程序:
#include <stdio.h>#include <stdlib.h>#define MAXLEN 100int Func(int *A,int nSize){ int i,j,count=0,flag; int *ptr,*p1; p1=(int *)malloc(sizeof(int)*nSize); ptr=A; for(i=0;i<nSize;i++) { if(0==*(ptr+i)) { flag=i; break; } } for(i=0;i<nSize;i++) { if(*(ptr+i)!=0) { *(p1+count)=*(ptr+i); count++; } } for(j=count;j<nSize;j++) { *(p1+j)=0; } for(i=0;i<nSize;i++) { *(A+i)=*(p1+i); } free(p1); return flag;}int main(){ int A[MAXLEN],n,i,flag0; printf("Please input the length of array A(n):"); scanf("%d",&n); printf("Please input %d numbers:",n); for(i=0;i<n;i++) { scanf("%d",&A[i]); } flag0=Func(A,n); printf("%d\n",flag0); printf("The sorted numbers are:"); for(i=0;i<n;i++) { printf("%d ",A[i]); } printf("\n"); return 1;}
他的算法基本思想是把非零的数和零互换,而我的主要是找出全部非零的数,然后直接放在数组前面,后面补零。我感觉他的算法效率更高些,比较好。
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至后面
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至 数组前面并保持有序,返回值为原数据中第一个
- 写一个函数int Func(int* A, int nSize), 使A把0移至后面,非0整数移至数组前面 并保持有序,返回值为原数据中第一个元素为0的下标。
- 上海华为的一道关于指针方面的编程题 int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize)
- 面试编程题---其中隐藏着若干0,其余非0整数,使A把0移至后面,非0整数移至数组前面并保持有序
- int a = (int)(((int*)0)+4);
- C++中纯虚函数virtual func(int a, int b)=0;
- 201111621401-白乐乐-判断一个正整数是否为质数的算法。函数签名如下 int isPrime(long a) 输入:一个长整数a 输出:返回1(为质数),返回0(非质数)
- int (*a)(int) ; int (*a[10])(int); int *(*a)(int) ;
- int a = 0 与 int a(0) int a(b)
- int a; int* a; int** a; int (*a)[10]; int (*a)(int);int *(*a)[10]区别?
- int a; int* a; int** a; int a[10]; int (*a)[10]; int (*a)(int); 区别
- int func(int a) { int b; switch(a) { case 1: 30; case 2: 20; case 3: 16; default: 0 } return b; }
- int *a[10],int (*a)[10],int *a[10],int (*a)(int),int (*a[10])(int)
- A(A& other,int x=0)//*/ A(const A& other,int x=0)
- 关于int *a; int &a; int & *a; int * &a
- 谈谈对APC的一点理解
- 加锁解锁PHP实现
- pthread_once 和 pthread_key
- Moodle(2.1+)新搭建完毕后要做的事情(2.3.1+更新)
- Java常用类库(一)
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至后面
- ComboBox没有到具体一个item的Tag属性。
- EXCEL 截取一段,做除法运算,精确两位小数
- SSI技术详解
- rmp包的软件的安装和卸载
- 静态库和动态库编译方法和开发上的重要性
- memcache中内存管理源码剖析
- 一些很好的技术学习博客
- hdu 1062 Text Reverse(水)