c++ sort()函数用法
sort函数用法例如:
int cmp( const int &a, const int &b ){
if( a > b )return 1;
else
return 0;
}
sort(a,a+n,cmp);
是对数组a降序排序
又如:
int cmp( const POINT &a, const POINT &b ){
if( a.x < b.x )
return 1;
else
if( a.x == b.x ){
if( a.y < b.y )
return 1;
else
return 0;
}
else
return 0;}
sort(a,a+n,cmp);
是先按x升序排序,若x值相等则按y升序排。
默认的sort函数是按升序排,sort(a,a+n); //两个参数分别为待排序数组的首地址和尾地址。
扩展资料:
sort函数语法
Sort(start,end,cmp)
参数
1、start表示要排序数组的起始地址
2、end表示数组结束地址的下一位
3、cmp用于规定排序的方法,可不填,默认升序
功能
sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。
一般是直接对数组进行排序,例如对数组a[10]排序,sort(a,a+10),而sort函数的强大之处在可与cmp函数结合使用,即排序方法的选择。
sort()函数是c++一种排序方法之一,相较冒泡排序和选择排序所带来的执行效率不高的问题,sort()函数使用的排序方法是类似于快速排序的方法,时间复杂度为n*log2(n),执行效率较高。
参考资料来源:百度百科-sort函数
#include"head.h"#include using namespace std;bool dy(int a,int b){ return a>b;}bool xy(int a,int b){ return a<b;}int main(){ srand(unsigned(time(NULL))); int a[10]; int b[10]; int sj=0; int j=0; int ptr=0; for(int i=0;i<10;++i) { a[i] = rand()%50;//1 if(a[i]%2){ ++sj; b[j++]=a[i];//2 } } ptr=j; for(int i=0;i<10;++i) { if(a[i]%2==0) { b[j++]=a[i];//2 } } for(int i=0;i<10;++i) { cout << b[i] << " "; } cout << endl; sort(b,b+10,xy); for(int i=0;i<10;++i) { cout << b[i] << " "; } return 0;}
使用sort()函数在做简单排序算法时候是非常好的方法。
sort(buffer,buffer+n,cmp); buffer为待排序数组的首地址,buffer+n为待排序数组的最后一个数据的地址。cmp为自定义的排序规则函数,可省略。
sort()函数默认是为升序排列,允许排序类型包括数值/字符/字符串。sort()也可以对结构体进行排序。
cmp函数的返回值为true和false或1和0,若为true/1,则sort()函数为升序排列,若为false/0,则sort()函数为降序排列。
下面为一个找出奶牛产奶量中间值的小程序,举例说明:
#include "iostream"
#include "algorithm"
using namespace std;
//奶牛结构类
typedef struct
{
int milk;
int num;
}COW;
COW cow[100];
bool cmp(COW A, COW B);
//主函数
void main()
{
int n;
cout<<"请输入奶牛的数量: ";
cin>>n;
for(int i=1;i<=n; i++)
{
cout<<"请输入奶牛"<<i<<"的产奶量: ";
cin>>cow[i-1].milk;
cow[i-1].num = i;
}
sort(cow,cow+n,cmp); //排序比较
cout<<"中间奶牛产奶量为: "<<cow[n/2].milk<<endl;
system("pause");
}
//cmp排序规则函数
bool cmp(COW A, COW B)
{
if (A.milk < B.milk) //按产奶量由小到大排序
{
return true;
}
else if (A.milk == B.milk)
{
if (A.num > B.num) //产奶量相同时,按序号由大到小排序
{
return true;
}
return false;
}
else
{
return false;
}
}
察看msdn的帮助阿
sort
template<class RanIt>
void sort(RanIt first, RanIt last);
template<class RanIt, class Pred>
void sort(RanIt first, RanIt last, Pred pr);
The first template function reorders the sequence designated by iterators in the range [first, last) to form a sequence ordered by operator<. Thus, the elements are sorted in ascending order.
The function evaluates the ordering predicate X < Y at most ceil((last - first) * log(last - first)) times.
The second template function behaves the same, except that it replaces operator<(X, Y) with pr(X, Y).
#include <algorithm>
void sort( iterator start, iterator end );
void sort( iterator start, iterator end, StrictWeakOrdering cmp );
报什么错??
蹉德乌体: ●首先sort要包含algorithm头文件.●其次sort是std命名空间中的函数,要写std::sort,或者在最开始写using namespace std; ●最后,C++中的sort很多情况下不需要你写cmp函数,像你的情况是比较两个int,可以直接这么写:sort(a+j,a+n-j+1); sort自己知道如何比较两个int的.而且即使是复杂的比较,也一般写仿函数而不是函数,因为仿函数更快.
屯溪区18557672425: C/c++ sort用法 - ?
蹉德乌体: .默认的sort函数是按升序排.对应于1) sort(a,a+n); //两个参数分别为待排序数组的首地址和尾地址2.可以自己写一个cmp函数,按特定意图进行排序.对应于2) 例如:int cmp( const int &a, const int &b ){ if( a > b ) return 1; else return 0; } sort(a,a...
屯溪区18557672425: C++中sort()怎么用 - ?
蹉德乌体: #include <algorithm> void sort( iterator start, iterator end ); void sort( iterator start, iterator end, StrictWeakOrdering cmp ); 第一个只需要传递你要排序的串(整形数组等都行)的头指针(数组第一个元素的指针)与数组最后元素的下一个位置,sort是一个模板哈 第二个前面两个参数同第一,但第三个参数是传递一个你定义用于排序的函数(返回比较的大小值,如strcmp或自定义的都行),因为第一个用的是默认的哈
屯溪区18557672425: C++ sort函数 参数的用法? - ?
蹉德乌体: std::sort,所在头文件 template void sort(RandomIt first,RandomIt last); template void sort(ExecutionPolicy&& policy,RandomIt first,RandomIt last); template void sort(RandomIt first,RandomIt last,Compare comp); template void sort(...
屯溪区18557672425: C++中sort()怎么用?
蹉德乌体: #include <algorithm> void sort( iterator start, iterator end ); void sort( iterator start, iterator end, StrictWeakOrdering cmp ); 第一个只需要传递你要排序的串(整形数组等都行)的头指针(数组第一个元素的指针)与数组最后元素的下一个位置,sort是一个模板哈 第二个前面两个参数同第一,但第三个参数是传递一个你定义用于排序的函数(返回比较的大小值,如strcmp或自定义的都行),因为第一个用的是默认的哈
屯溪区18557672425: C++ algorithm 里的sort函数怎么用 - ?
蹉德乌体: sort函数用法例如:int cmp( const int &a, const int &b ){ if( a > b )return 1; else return 0; } sort(a,a+n,cmp); 是对数组a降序排序 又如:int cmp( const POINT &a, const POINT &b ){ if( a.x < b.x ) return 1; else if( a.x == b.x ){ if( a.y < b.y ) return 1; else ...
屯溪区18557672425: C程序 sort函数 - ?
蹉德乌体: 1)这程序是一个C++程序,不是C程序 2) #include <algorithm 在algorithm.h头文件里有函数sort()的定义,这样以下的语句才可以调用sort()函数 3) using namespace std;声明使用C++标准库,这样在调用sort()时不用写成std::sort() 4) sort(begin,end)排序函数将在区间[begin,end]内元素按升序进行排序,begin和end间的元素都是可以随机访问如数列(array)中元素,不能是依次序访问元素如串列(list),队列(queue)中元素. 5) 要在第7行scanf()后面加 ;
屯溪区18557672425: c++ 中sort的用法 实例说明?
蹉德乌体: #include "iostream" #include "algorithm" using namespace std; typedef int data_t; bool mycmp(const data_t &a, const data_t &b) //返回true表示排序时a应该放在b前面 { return a>b; } int main() { data_t a[10]={1,4,2,3,6,7,5,9,0,8}; int N=10; ...
屯溪区18557672425: C++中关于泛型算法sort()用法的问题?C++达人进! - ?
蹉德乌体: 首先实现这个排序有两种方式,一个自己定义一个返回值为bool的比较函数.一个是自己定义类中的<操作函数.第一种方式可以简单写为.bool cmp(node x,node y) { return x.key1<b.key1; } sort(vec.begin,vec.end.cmp); 这种排序是从小到大的,也...
屯溪区18557672425: 请问c++中的STL链表中的sort怎么用??链表里的元素是类... - ?
蹉德乌体: list::sort有两种形式,一种是不带参数的,一种是可以传入一个比较函数或仿函数的.如果链表中保存的元素支持比较运算(比如是int、double这种基本类型,或者是对象但对象定义了operator