#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int N=0, k = 0;
int a[100];
int b[100];
cin >> N;
for (int i = 0; i < N; i++) {
cin >> a[i];
}
sort(a, a + N);
for (int i = 0; i < N; i++) {
if (i == 0) {
if (a[1] != a[0]) {
b[0] = a[0];
k++;
}
else {
b[0] = a[1];
k++;
}
}
else {
if (a[i] != a[i - 1]) {
b[k] = a[i];
k++;
}
}
}
cout << k << endl;
for (int i = 0; i < k; i++) {
cout << b[i] << " ";
}
return 0;
}
本次收获
- 对于删除相同的数字,字符可以先排序,再进行删除。
- 对于sort函数的应用
C++sort()函数的用法
sort()函数使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n)
Sort函数有三个参数:
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址)
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三
个参数,此时默认的排序方法是从小到大排序。
Sort函数使用模板:
Sort(start,end,排序方法)
例一:sort函数没有第三个参数,实现的是从小到大
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10);
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
例二
通过上面的例子,会产生疑问:要实现从大到小的排序怎么办?
这就如前文所说需要在sort()函数里的第三个参数里做文章了,告诉程序我要从大到小排序!
需要加入一个比较函数 compare(),此函数的实现过程是这样的
bool compare(int a,int b)
{
return a>b;
}
这就是告诉程序要实现从大到小的排序的方法!
#include<iostream>
#include<algorithm>
using namespace std;
bool compare(int a,int b)
{
return a>b;
}
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10,compare);
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
例三:
sort函数的第三个参数可以用这样的语句来说明排序原则
less<数据类型>()
greater<数据类型>()
结合本例子,这样的就可以完成你想要的任何一种排序原则了
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10,less<int>());
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10,greater<int>());
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
例四:利用sort函数还可以实现对字符的排序,排序方法大同小异
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
char a[11]="asdfghjklk";
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10,greater<char>());
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}