有大佬知道c++ sort函数怎么对动态数组排序吗?

作者&投稿:代竖 (若有异议请与网页底部的电邮联系)
请问,C++中的类的对象组成的动态数组怎么用sort()或qsort()排序?~

使用sort排序结构体网上例子很多的 就是先写一个排序函数
然后让sort按照你的函数排序就行了

STL 里面有个 sort 函数,可以直接对数组排序,复杂度为 n*log2(n) 。使用这个函数,需要包含头文件。
这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是 [a,b) 。简单来说,有一个数组 int a[100] ,要对从 a[0] 到 a[99] 的元素进行排序,只要写 sort(a,a+100) 就行了,默认的排序方式是升序。
拿我出的“ AC 的策略”这题来说,需要对数组 t 的第 0 到 len-1 的元素排序,就写 sort(t,t+len);
对向量 v 排序也差不多, sort(v.begin(),v.end());
如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。比较函数是一个自己定义的函数,返回值是 bool 型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数 cmp
bool cmp(int a,int b)
{
return a>b;
}
排序的时候就写 sort(a,a+100,cmp);
假设自己定义了一个结构体 node
struct node{
int a;
int b;
double c;
}
有一个 node 类型的数组 node arr[100] ,想对它进行排序:先按 a 值升序排列,如果 a 值相同,再按 b 值降序排列,如果 b 还相同,就按 c 降序排列。就可以写这样一个比较函数:
以下是代码片段:
bool cmp(node x,node y)
{
if(x.a!=y.a) return x.a
if(x.b!=y.b) return x.b>y.b;
return return x.c>y.c;
}
排序时写 sort(a,a+100,cmp);

你无法用STL里的sort算法对容器set作排序。set本身就是一种有序的容器。 set主要用于不常变动的数据,对其数据的变动,只能是删除旧的,然后再插入新的,这点从它的iterator就能看出来,它的iterator是const的。你可以在初始化set的时候,指定比较排序的方法,或者干脆把set转换为其它容器(比如vector),然后再排序。 但无法再装入原来的set,因为原来的set的排序方法已被固化了。范例如下:
#include #include #include #include #include using namespace std;struct classcomp { bool operator() (const int& lhs, const int& rhs) const {return lhs>rhs;}};int main(int argc, char** argv) { int a[]= {30,40,50,20,10}; set s1 (a, a+sizeof(a)/sizeof(a[0])); set s2(s1.begin(), s1.end()); vector v; // print the 1st set. copy(s1.begin(), s1.end(), ostream_iterator(cout, " ")); cout (cout, " ")); cout (cout, " ")); cout (cout, " ")); cout << endl; return 0;}

sort()的使用方法为sort(begin,end),在一般的编程之中可以直接带入容器的begin()和end()函数来对,容器进行遍历。其函数包含在头文件<algorithm>中,其组成方面主要有两中排序方法(1)插入排序(2)快速排序。STL中定义了一个SORT_MAX变量来进行判断,如果大于SORT_MAX就使用快排,否则使用插排

有两种方法:

1

将向量元素的地址传递给sort函数,如:

sort(&v[0],&v[v.size()]);

2

调用向量的begin和end方法,如:

sort(v.begin(),v.end());

这是例子代码:

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

int main()

{

//方法1

vector<int> v={6,5,2,4,1};

sort(&v[0],&v[v.size()]);

for(auto &&e:v)

cout<<e<<",";

cout<<endl;

//方法2

v={12,6,8,25,9,1};

sort(v.begin(),v.end());

for(auto &&e:v)

cout<<e<<",";

cout<<endl;

return 0;

}

这是截图:




锦江区15761385747: C++中sort()怎么用 -
毅娜卡力: #include <algorithm> void sort( iterator start, iterator end ); void sort( iterator start, iterator end, StrictWeakOrdering cmp ); 第一个只需要传递你要排序的串(整形数组等都行)的头指针(数组第一个元素的指针)与数组最后元素的下一个位置,sort是一个模板哈 第二个前面两个参数同第一,但第三个参数是传递一个你定义用于排序的函数(返回比较的大小值,如strcmp或自定义的都行),因为第一个用的是默认的哈

锦江区15761385747: 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 ...

锦江区15761385747: c++ sort函数运用详解 -
毅娜卡力: ●首先sort要包含algorithm头文件.●其次sort是std命名空间中的函数,要写std::sort,或者在最开始写using namespace std; ●最后,C++中的sort很多情况下不需要你写cmp函数,像你的情况是比较两个int,可以直接这么写:sort(a+j,a+n-j+1); sort自己知道如何比较两个int的.而且即使是复杂的比较,也一般写仿函数而不是函数,因为仿函数更快.

锦江区15761385747: 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(...

锦江区15761385747: C++中sort()怎么用
毅娜卡力: #include &lt;algorithm&gt; void sort( iterator start, iterator end ); void sort( iterator start, iterator end, StrictWeakOrdering cmp ); 第一个只需要传递你要排序的串(整形数组等都行)的头指针(数组第一个元素的指针)与数组最后元素的下一个位置,sort是一个模板哈 第二个前面两个参数同第一,但第三个参数是传递一个你定义用于排序的函数(返回比较的大小值,如strcmp或自定义的都行),因为第一个用的是默认的哈

锦江区15761385747: 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...

锦江区15761385747: c++中sort()排序如何使用? -
毅娜卡力: sort是STL中的函数,如何使用要看你用的什么容器.你要包数组中的元素先导入容器中,如vector,list等.然后象调用一般的类方法一样使用.sort()的实现方法要看你的STL的实现版本.用的是用快速排序,有的是用intro排序.快速排序的一般复杂度为nlogn,最差情况为n2. intro排序复杂度始终为nlogn.

锦江区15761385747: 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()后面加 ;

锦江区15761385747: 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; ...

锦江区15761385747: C++ sort函数 -
毅娜卡力: 比较函数是为了区分两个参数是大于等于或者小于,分别以返回值大于0、等于0和小于0来判定.因为排序的目的主要是让决定谁在前谁在后的问题,所以通常你只需要定义小于就行了.如果compare(a,b)是判定ab,如果既不大于也不小于,那...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网