从前写的那个关于去重的算法可能出现了一些问题,由于受到某些固定思想的限制,总想着去前移覆盖重复元素导致了思维受限,最近突发奇想,想到了一个很容易理解并且也很实用的算法,简单至极,看一遍就懂。
#include<iostream>
using namespace std;
#define max 100
int quchong(int *p,int n,int *a);
int quchong(int *p,int n,int *a){ //p是原来的数组,n是数组的长度,a是未进行赋值的新数组 ,返回值是新数组的长度
a[0]=p[0];
int l=1; // 先将第一个值插入,方便比较,不会出现比空的操作
int i,j,k;
for(i=1;i<n;i++) //这个循环是用来遍历外面数组的
{ k=0;
for(j=0;j<l;j++)
if(p[i]==a[j]){
k=1; //这里用到了一个辅助变量k来验证我们通过比较后是否发现新数组中有重复的元素
break;
}
if(k==0){
a[l]=p[i];
l++; //再插入一个的同时需要对新数组的长度加一
}
}
return l; //返回新数组的长度
}
int main(){
int a[max],b[max];
int c,d=5;
for(int i=0;i<5;i++)
{
cin>>c;
a[i]=c;
}
c=quchong(a,d,b);
for(int i=0;i<c;i++)
cout<<b[i];
}
下面主要是用来测试的所以我随便写了一下,重要的是上面这个方法,我们采用了两个数组进行比较插入的方法,简单易懂。