c语言数组去重
今天在做题的时候需要用的数组去重的算法,本人又太懒,在网上看到有标准库函数来解决这个问题,今天和大家分享一下。这个神奇的函数就是unique函数,现在我们来介绍一下unique函数-----**unique函数类属性算法unique的作用是从输入序列中“删除”所有相邻的重复元素。该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度没变,只是元素顺序改变了),...
·
今天在做题的时候需要用的数组去重的算法,本人又太懒,在网上看到有标准库函数来解决这个问题,今天和大家分享一下。这个神奇的函数就是unique函数,现在我们来介绍一下unique函数-----
**unique函数
类属性算法unique的作用是从输入序列中“删除”所有相邻的重复元素。
该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度没变,只是元素顺序改变了),表示无重复的值**
现在我们看看怎么具体使用这个函数
#include<iostream>
#include<algorithm>//unique所在的头文件
using namespace std;
int main()
{
int a[10] = {1,1,1,2,3,4,5,5,3,2};
sort(a,a+10);//因为unique是去除相邻的相邻的重复元素,所以我们要先排序
int n = unique(a,a+10) - a;//排序后的数值长度
for(int i=0;i<n;i++)//遍历整个数组
{
cout<<a[i]<<" ";
}
return 0;
}
今天想了想人生不能那麽坠落呀!于是自己琢磨了几种去重的算法,几天和大家分享一下。
再次更新
第一种版本,比较low,但容易理解
#include<stdio.h>
int main()
{
int a[10] = {1,1,1,2,3,4,5,5,3,2};
int b[10];
int count = 0;
for(int i=0;i<10;i++)
{
int k = a[i];
int flag = 1;
for(int j=i+1;j<10;j++)
{
if(k==a[j])
{
flag = 0;
break;
}
}
if(flag==1)
{
b[count++] = k;
}
else
{
continue;
}
}
a[10] = {0};
for(int i=0;i<count-1;i++)
{
a[i] = b[i];
printf("%d",a[i]);
}
return 0;
}
第二种版本
#include<stdio.h>
int main()
{
int a[] = {1,2,1,4,2,1,4,2,4,3,5,2,3,5,3,2,2,5,3,1,1,1};
//int b[n];
int n = sizeof(a)/sizeof(a[0]);//求数组的长度
//int count = 0;
for(int i=0;i<n;i++)
{
int k = a[i];
for(int j=i+1;j<n;j++)
{
if(k==a[j])//判断数组中是否有重的元素
{
for(int k=j;k<n-1;k++)
{
a[k] = a[k+1];
}
n--;
j--;//这一步非常重要,没有的话部分结果就会不正确
}
}
}
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
更多推荐
已为社区贡献1条内容
所有评论(0)