C语言实现删除整形数组里的相同的数

该博客详细解析了一个C语言实现的数组去重算法,通过遍历数组并比较相邻元素来删除重复项。博主强调了在删除元素后更新数组大小sz--的重要性,并通过实例解释了为何需要同时进行j--操作,以确保所有重复元素都能被正确处理。最后,博客展示了处理后的数组输出结果。
摘要由CSDN通过智能技术生成
#include<stdio.h>
int main()
{
	int arr[]={1,1,1,1,1,2,2,2,2,2};
	int i=0,j=0,k=0;
    int sz=sizeof(arr)/sizeof(arr[0]);
    for(i=0;i<sz;i++)
    {
    	for(j=i+1;j<sz;j++)
    	{
    		if(arr[j]==arr[i])
    		{
    			for(k=j;k<sz-1;k++)
    			{
    				arr[k]=arr[k+1];
				}
				sz--;//这里要注意要有sz--和j-- 解释在下文
				j--;
			}
		}
	}
	for(i=0;i<sz;i++)
	printf("%d ",arr[i]);
	
	
	
	
	return 0;
}

原理:将数组中的第一个数与其后面的数相比较,如果相等的话就把第二个数后面的数往前替换掉从第二个数开始的每个数,也就是把那个相同的数覆盖或者理解为删除掉,例如 1123 开始1与1比较两者相等 后面的2替换掉第二个1,3又替换掉前面2的位置 第2个1就相当于被删除了此时要注意数组的大小要减1 也就是代码中的sz-- ;

注意:这里说一下为啥还要j--,举个例子111234  按照上面的逻辑第二个1会被删掉大小由6变成了5 

数组就是11234   假如没有j--的话 判断的循环会继续进行,j会++一下变成2,arr[2]就是指向数组的第三个数了也就是此时数组中的2了  显然11234 中的第二个1被遗忘了 最后的结果就是11234

但是如果j--了一下,就会与j++相互抵消了 就相当于没有变化,按照上面的例子 j还是会指向第一个1后面的元素 也就是第二个1了 这样比较后11234中第二个1 也会被删除 最终的结果就是1234而不是11234了 。

writer:white_to_sg 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值