C++ STL之排序算法

时间:2024-12-19 22:04:44

排序算法和查找算法差不多,也涉及到迭代器区间问题,关于该问题的注意事项就不在啰嗦了

一、全部排序sort、stable_sort

sort是一种不稳定排序,使用时需要包含头文件algorithm

默认可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。如果只传入这两个地址的话,就按照升序对指定地址区间排序。想要按照降序排列的话,需要传入第三个函数,第三个函数可以自己写cmp,也可以直接调用库函数

greater<data-type>(),使用库函数的时候要包含头文件functional。

总结如下:

#include<algorithm>

#include<functional>

升序:sort(begin,end,less<data-type>());

降序:sort(begin,end,greater<data-type>()).

 #include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
int main()
{
int a[]={,,,,,,,,};
//升序
sort(a,a+,less<int>());
cout<<"升序排序结果"<<endl;
for(int i=;i<;i++)
{
cout<<a[i]<<endl;
}
//降序
sort(a,a+,greater<int>());
cout<<"降序排序结果"<<endl;
for(int i=;i<;i++)
{
cout<<a[i]<<endl;
}
return ;
}

如果忘记了升序或者降序后面的那个方法名称,也可以自己写个简单的

bool cmp(int a,int b)
{
 return a>b;
}

sort(a,a+9,cmp);
就是降序

bool cmp(int a,int b)

{

return a<b;

}

sort(a,a+9,cmp);

就是升序

与之对应的有一个stable_sort()用法与sort一样,是稳定排序。

二、部分排序partial_sort、partial_sort_copy

 #include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int num[]={,,,,,,,,,};
for(int i=;i<;i++)
{
cout<<num[i]<<" ";
}
cout<<endl;
//partial_sort
//void partial_sort(_RanIt _First, _RanIt _Mid, _RanIt _Last, _Pr _Pred)
//选出[_First, _Last)之间的_Mid-_First个数进行排序,放在_First到_Mid位置,剩下的在_Mid到_Last的元素不排序,pred是排序方式
partial_sort(num,num+,num+);
for(int i=;i<;i++)
{
cout<<num[i]<<" ";
}
cout<<endl; //partial_sort_copy
//_RanIt partial_sort_copy(_InIt _First1, _InIt _Last1,_RanIt _First2, _RanIt _Last2, _Pr _Pred)
int shuzi[]={,,,,,,,,,};
int result1[];
int result2[];
partial_sort_copy(shuzi,shuzi+,result1,result1+);
for(int i=;i<;i++)
{
cout<<shuzi[i]<<" ";
}
cout<<endl;
for(int i=;i<;i++)
{
cout<<result1[i]<<" ";
}
cout<<endl; partial_sort_copy(shuzi,shuzi+,result2,result2+);
for(int i=;i<;i++)
{
cout<<shuzi[i]<<" ";
}
cout<<endl;
for(int i=;i<;i++)
{
cout<<result2[i]<<" ";
}
cout<<endl;
return ;
}