Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高!
一,sort()排序函数的使用方法
I)Sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可!
II)Sort函数有三个参数:Sort(start,end,排序方法)
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址的下一地址)
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
二,sort函数使用的简单举例
I)对一维数组进行从小到大的排序
#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函数的第三个参数了,通过第三个参数,实现从大到小的排序。
II)对一维数组进行从大到小排序
#include<iostream>
#include<algorithm>
using namespace std;
bool com(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,com);
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
通过构造一个bool型的com函数,并将com作为sort函数的第三个参数,即可实现对一维数组的从大到小排序。
三,sort函数使用的举例拓展
如果此时读者需要对一个2行n列的数组进行排序,并且是根据每一列的第一个元素的大小进行排序。最重要的是,在改变位置时,每一列的两个元素要还在同一列,不能乱掉。那么该如何用sort函数实现呢?下面小编带读者来了解一下这个过程。
我们可以将,每一列的两个元素看成一个结构体的两个元素,然后把整个数组看成是一个由结构体组成的一维数组。
typedef struct{
int x,y;
}node;//在这里只需将每一列的第一个元素看成x,第二个元素看成y
同理,我们仿造上面的com函数,再次构造一个coma函数;
bool coma(node a,node b){
return a.x>b.x;
}
下面是完整的代码
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct{
int x,y;
}node;
bool coma(node a,node b)
{
return a.x>b.x;
}
int main()
{
node a[4];
for(int i=0;i<4;i++)
cin<<a.x<<a.y<<endl;
sort(a,a+4,coma);
for(int i=0;i<4;i++)
cout<<a.x<<" "<<a.y<<endl;
return 0;
}
下面,附上一道题目,小编认为在这道题目中可能会用到以上知识。
设有n种不同面值的硬币,各硬币的面值存于数组w[i]中。现要用这些面值的硬币来找钱,可以使用的各种面值的硬币个数存于数组s[i]中。对任意钱数0<=m,设计一个用最少硬币找钱的方法。
由于小编,水平有限,此文章中可能存有问题,欢迎各位读者批评指正,小编一定积极改正。
原文地址:http://blog.51cto.com/13642075/2085626