频道栏目
首页 > 资讯 > 其他 > 正文

小算法--数组中元素的移动

16-07-15        来源:[db:作者]  
收藏   我要投稿

题目描述:给定一个数组,假定这个数组中多个0,并且其他元素都各出现一次,

试将所有的0移到数组的尾部。

举例:

给定数组: 1,3,0,5,7,0,3,4

最后所得数组:1,3,5,7,3,4,0,0

下边给出两种方法实现:

方法一:原理就是遇到0的时候,后边的元素统一向前移动。如果前边是1个0,后边元素向前移动一个,如果两个0,后边元素向前移动2个,以此类推,最后将后边的元素填充为0即可。

代码实现:

#include

void moveZeros(int arr[], int len)
{
	if (len <= 0)
	{
		return;
	}
	int i = 0;
	int zeros = 0;
	for (i = 0;i < len; i++)
	{
		if (arr[i] != 0)
		{
			arr[i - zeros] = arr[i];
		}
		else
		{
			zeros++;
		}
	}
	for (i = len - zeros;i < len;i++)
	{
		arr[i] = 0;
	}
}

int main()
{
	int arr[8] = { 1,3,0,7,8,0,2,9 };
	moveZeros(arr,8);
	int i = 0;
	for (i = 0;i < 8; i++)
	{
		printf("%d ",arr[i]);
	}
	system("pause");
	return 0;
}


 

方法二:

代码实现:

 

#include


void moveZeros2(int arr[], int len)
{
	if (len <= 0)
	{
		return;
	}
	int i = 0;
	int tmp = 0;
	int j = 0;
	for (i = 0;i < len; i++)
	{
		if (arr[i] != 0)
		{
			tmp = arr[i];
			arr[i] = arr[j];
			arr[j] = tmp;
			j++;
		}
	}
}
int main()
{
	int arr[8] = { 1,3,0,7,8,0,2,9 };
	moveZeros2(arr,8);
	int i = 0;
	for (i = 0;i < 8; i++)
	{
		printf("%d ",arr[i]);
	}
	system("pause");
	return 0;
}

 

当然了,解决这道题目还有别的办法,比如,数组后边的非0元素和数组前边的0交换。

不过感觉就上边的方法2效率高。

好了,先整理到这里。

相关TAG标签
上一篇:最小生成树
下一篇:python学习——使用元类
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站