c/c++ 去除数组中重复的元素

Posted Love丶伊卡洛斯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c/c++ 去除数组中重复的元素相关的知识,希望对你有一定的参考价值。

前言

    第一层循环 0 到 len-1,当i为0,第二层循环j为 i+1即1 到 len-1,依次判断是否 num[i] 和 num[j] 相等,如果相等则进入第三次循环,k为 j+1 到 len-1,将重复点 j 后面的所有元素都往前移动 1,并将数组长度 len - 1,j 也 -1(判断向前移动的元素们的第一位,也就是移动后在 j 位上的这个元素,是否还相等。因为 循环已经到了 j,如果 j不减1,则会跳过刚刚向前移动的元素,可能导致忽略的元素仍然重复),我将在结尾展示有无 j-1的效果。

正着来

#include <stdio.h>

int main()

	int len = 10;
	int i = 0, j = 0, k = 0;
	int num[len];

	printf("before:");
	for(i=0; i<len; i++)
	
		num[i] = (5 * i) % 10 + i;
		printf("%d ", num[i]);
	
	printf("\\n");
	
	for(i=0; i<len; i++)    //冒泡循环
	
		for(j=i+1; j<len; j++)//从i后的一个元素一直往len-1位置寻找
		
			if(num[j] == num[i])    //如果发现重复
			
				for(k=j+1; k<len; k++)//j+1的位置到len-1的位置
				
					num[k-1] = num[k];    //将后面的数依次赋值给前一个位置
				
				len--;    //数组长度-1
				j--;    //重复点再次进行查重
			
		
	

	printf("after: ");
	for(i=0; i<len; i++)
	
		printf("%d ", num[i]);
	
	printf("\\n");

	return 0;

倒着来找重复元素

for(i=0; i<len; i++)    //冒泡循环
	
		for(j=len-1; j>i; j--)
		
			if(num[j] == num[i])    //如果发现重复
			
				if(j == len-1)    //如果是最后一个位置,直接len-1,继续循环
				
					len--;
					continue;
				
				for(k=j+1; k<len; k++)
				
					num[k-1] = num[k];    //将后面的数依次赋值给前一个位置
				
				len--;    //数组长度-1
			
		
	

j - 1 的有无

#include <stdio.h>

void yes(void);
void no(void);

int main()

	yes();
	no();

	return 0;


void yes(void)

	printf("****** yes ******\\n");

	int len = 10;
	int i = 0, j = 0, k = 0;
	int num[len];

	printf("before:");
	for(i=0; i<len; i++)
	
		num[i] = (4 * i) / 10;
		printf("%d ", num[i]);
	
	printf("\\n");
	
	for(i=0; i<len; i++)    //冒泡循环
	
		for(j=i+1; j<len; j++)//从i后的一个元素一直往len-1位置寻找
		
			if(num[j] == num[i])    //如果发现重复
			
				for(k=j+1; k<len; k++)//j+1的位置到len-1的位置
				
					num[k-1] = num[k];    //将后面的数依次赋值给前一个位置
				
				len--;    //数组长度-1
				j--;    //重复点再次进行查重
			
		
	

	printf("after: ");
	for(i=0; i<len; i++)
	
		printf("%d ", num[i]);
	
	printf("\\n");


void no(void)

	printf("****** no ******\\n");

	int len = 10;
	int i = 0, j = 0, k = 0;
	int num[len];

	printf("before:");
	for(i=0; i<len; i++)
	
		num[i] = (4 * i) / 10;
		printf("%d ", num[i]);
	
	printf("\\n");
	
	for(i=0; i<len; i++)    //冒泡循环
	
		for(j=i+1; j<len; j++)//从i后的一个元素一直往len-1位置寻找
		
			if(num[j] == num[i])    //如果发现重复
			
				for(k=j+1; k<len; k++)//j+1的位置到len-1的位置
				
					num[k-1] = num[k];    //将后面的数依次赋值给前一个位置
				
				len--;    //数组长度-1
				//j--;    //重复点再次进行查重
			
		
	

	printf("after: ");
	for(i=0; i<len; i++)
	
		printf("%d ", num[i]);
	
	printf("\\n");

以上是关于c/c++ 去除数组中重复的元素的主要内容,如果未能解决你的问题,请参考以下文章

关于如何去除数组中重复项

几种去除数组中重复元素的方法

请问C#中有没有判断数组元素重复,或如何去除重复呀?

去除数组中所有重复元素

521. 去除重复元素

js怎么去除数组中的重复的数据