C++中有专门给对象数组排序的类方法吗,就像Java中的sort

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中有专门给对象数组排序的类方法吗,就像Java中的sort相关的知识,希望对你有一定的参考价值。

使用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);
参考技术A qsort(…)

C/C++基础之冒泡排序


排序算法作为编程语言中最基础的算法,在很多高级语言中系统都封装了sort方法,并提供自定义比较方法排序。但是,这背后是怎么实现的你真的知道吗?接下来几篇就给大家讲一讲C/C++里面最基础的集中数组排序方法实现吧。

冒泡排序

冒泡排序:顾名思义就是向气泡冒出来一样,谁大谁出来,在数组排序里就是谁大谁往后走。就像当初老师给我们排队的时候一样,按身高将一个最高个从前挨个比一直往后排

假设现在有一个数组{50,26,74,60,12,1,100}冒泡排序算法是怎么做的呢?

前一个跟后一个去比较大小,如果前一个比后一个大,则前面的跟后面的交换位置,再继续往后比,知道数组结束。我们看代码实现:

我们看运行结果:

排序成功。这里需要注意的一点就是第二个循环位置的循环条件for (int j = 0; j < sizeof(arr)/sizeof(int)-1-i; j++)这里一定要注意每比较完一趟后,后面的数已经是最大的了,已经排好了,再进行下一趟的时候我们就不需要再去跟它们比较了。并且由于比较里面已经取了j+1这个下标一定记得在循环条件里减1,不然就会越界

附上原代码:

#include <stdio.h>

#include <iostream>

using namespace std;

int main()

{

int arr[7] = {50,26,74,60,12,1,100};\

//这个循环式控制比较趟数,每趟都需要找出来一个最大的(除了已经排好的)

for (int i = 0; i < sizeof(arr)/sizeof(int)-1; i++)

{

//这个循环就是我在图示中表示的过程,最大的从前往后滚

for (int j = 0; j < sizeof(arr)/sizeof(int)-1-i; j++)

{

if(arr[j]>arr[j+1])

{

int temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp ;

}

}

}

//我们来输出一下看看排序成功没

for (int i = 0; i < sizeof(arr)/sizeof(int); i++)

{

cout<<arr[i]<<" ";

}

system("pause");

return 0 ;

}

以上是关于C++中有专门给对象数组排序的类方法吗,就像Java中的sort的主要内容,如果未能解决你的问题,请参考以下文章

如何返回对象C ++的数组[重复]

C++中有字符串吗?

重新排序单元格后如何更改获取结果控制器数组中对象的顺序

从我的 c++ 应用程序调用 c# dll(解析 XML 文件)以将数组/列表返回给 c++

C/C++基础之冒泡排序

c++有混合类型吗