上海华为的一道关于指针方面的编程题

题干:

int   A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int   Func(int*   A,   int   nSize),使A把0移至后面,非0整数移至

数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路) 

DoH_Wang ()发表于:2007-12-19 17:00:16

我不是华为员工,以下是我写的程序,我把有序理解为非0元素在原来数组中的先后顺序。

设计思路:
先找出第一个0元素取得返回值,然后设置两个一前一后的指针将非0元素有序地移至数组前面,最后将剩余的需要置0的空间置0。

#include   "stdafx.h"
#include   "assert.h"
/*
      名称:Func
      描述:使数组A中的0移至后面,非0整数移至前面并保持有序
        输入参数:数组A,数组长度nSize
      输出参数:无
        返回值:原数据中第一个元素为0的下标nValue
        日期:2007.12.19
        备注:数组中如果没有0,返回-1
*/
int   Func(int*   A,   int   nSize)
{
      assert(A   !=   NULL   &&   nSize   >   0);
     
      /*找出第一个0*/
      for(int   i=0,   *p   =   A,   *q,   nValue;   i   <   nSize;   i++)
            if(*p   ==   0)
            {
                  nValue   =   i;
                  q   =   p;
                  break;
            }
            else
                  p++;

      /*没有0*/
      if(i   > =   nSize)
            return   -1;

      /*将非0元素有序地移至前面*/
      for(++i;   i   <   nSize;   i++)
            if(*(++p)   !=   0)
                  *q++   =   *p;

      /*将剩余空间置0*/
      int   nLeft=nSize   -   (q   -   A);
      for(i=0;   i   <   nLeft;   i++)
            *q++   =0;

      return   nValue;
}        

学习写程序的方式,不管算法怎么样,程序应该写得规范,指出程序的功能,算法思想,输入参数类型,输出参数类型,返回值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值