上海华为的一道关于指针方面的编程题,大家来看看

题目是:

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

 

这是自己的写法。c++代码

#include "stdafx.h"
#include "iostream"
using namespace std;

void swap(int &a,int &b)
{

 a=a+b;
 b=a-b;
 a=a-b;


}

void F(int *A,int nsize)
{
 for(int i=nsize-1;i>=0;--i)
  for(int j=i+1;j<=nsize;++j)
  {
   int p=i;int q=j;
   while(A[p]==0&&A[q]!=0&&q<nsize)
   {
    swap(A[p],A[q]);
    p=q;
    q++;

    
   }
  }
}

int main(int argc, char* argv[])
{
 int B[10]={0,1,23,3,0,0,3,4,2,0};
 int m=10;
 F(B,m);
 for(int i=0;i<10;++i)

 cout<<B[i]<<endl;


 return 0;
}
这是一个基于冒泡的算法,当然和冒泡算法有所不同

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值