C++数组中数据去重排序问题。

数组p[5000]中,有数据,000~999,和001~777,请问,如何去掉数组中重复的数据只保留一个,并且把去重后的数据进行从小到大的排序。请写出代码+50分。... 数组p[5000]中,有数据,000~999,和001~777,请问,如何去掉数组中重复的数据只保留一个,并且把去重后的数据进行从小到大的排序。请写出代码+50分。 展开
 我来答
我也是学渣
推荐于2017-09-08 · TA获得超过238个赞
知道答主
回答量:21
采纳率:100%
帮助的人:28.7万
展开全部
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
int i = 0, j = 0;
int p[5] = {1,2,5,2,4}, t[5];

sort(p,p+5);   //全部排序
while (i < 5-1)  //去重复
{
if (p[i] != p[i+1])
t[j++] = p[i+1];
++i;
}

for (i = 0; i < j; i++)  //输出
cout<<t[i]<<" ";

return 0;
}
忽忽上升
2014-06-15 · TA获得超过1911个赞
知道小有建树答主
回答量:1166
采纳率:70%
帮助的人:577万
展开全部
#include<iostream>
#include<algorithm>
using namespace std;

/*申请标志数组算法:设立访问标志数字,初始化为0,访问到N时将标志数字的第N个元素置为N。最后遍历该数组,若标志数组中对应值为非0,则顺序存储该数字于原数组中,最后返回去除重复数字后的有效数的个数*/
int RemoveRep(int array[], int n)
{
        int *arrayflag = (int *)malloc(n*sizeof(int));
        int left = 0, i = 0; 
while(i<n)
        arrayflag[i++] = false; //初始化标志数组 
        for(i=0;i<n;i++)//剔除算法
arrayflag[array[i]] = array[i]; //将出现过的数保存到对应的位置        

        for(i=0;i<n;i++) //取出有效数
        {
                if(arrayflag[i] != false)
                       array[left++] = arrayflag[i];
        }        
        return left;
}

int main()
{   
int left;
    int p[5000];
left = RemoveRep(p,5000);
sort(p,p+left);
}

参考资料:

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c45607a01
2014-06-15
知道答主
回答量:17
采纳率:0%
帮助的人:18.5万
展开全部

抱歉,不知道数组p输入方式

#include<iostream>
using namespace std;
int ans[1000];
int p[5000];
int main(){
 for(int i=0; i<5000; i++){
  cin>>p[i];
 }
 for(int i=0; i<5000; i++){
  ans[p[i]]++;
 }
 for(int i=0; i<1000; i++){
  if(ans[i]!=0)
  cout<<i<<endl;
 }
 return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
FS_噢漏
2014-06-15 · 超过12用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:35.8万
展开全部
既然是C++用标准库就行啊 先排序(自己排也行 sort 也行 )然后用 unique()===删除相邻的重复元素 关于unique()的用法查查就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
longtao305
2018-04-25
知道答主
回答量:1
采纳率:0%
帮助的人:878
展开全部
#include <iostream>
#include <set>
#define MAXN 5000
using namespace std;
int arr[MAXN];
int main()
{
int n;
cin >> n;

set < int > s;
set < int >::iterator iter;
for ( int i = 0; i < n; i++ ){
cin >> arr[i];
s.insert( arr[i] );
}
for ( iter = s.begin(); iter != s.end(); ++iter )
cout << *iter << " ";
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式