某软件研发笔试题 – 0的移动

本文介绍了一种在数组中将零元素移至末尾同时保持非零元素有序的方法,并提供了两种实现方案:一种通过遍历填充零元素,另一种借鉴快速排序的思想。此外,还详细展示了如何对非零元素进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

题目:

int a[nSize],其中隐藏着若干0,其余非0整数,写一个函数

int Func(int *a, int nSize);

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

 

 

解:

思路1:不知道这里的有序是什么个意思。是按照大小有序,还是按原来先后顺序有序。如果是原来先后顺序有序的话。只需要一次遍历,将为0的元素填充为后面第一个不为0 的元素,然后将不为0的元素置0即可。

 

思路2:借用快速排序思想,设两指针low和high,分别指向数组头和尾。low指针从前往后扫描为0的元素,high指针从后往前扫描不为0的元素然后交换,当low<high时结束,此时high指针指向不为0元素中的最后一个。然后对a[0..high]进行从大到小排序。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值