c++标准库里的sort()排序函数

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

时间: 2024-10-08 07:59:09

c++标准库里的sort()排序函数的相关文章

泛型编程与C++标准模板库 : 浅谈sort()排序函数

以前用sort排序的时候,只知道sort函数有如下两种重载方式. template< class RandomIt > void sort( RandomIt first, RandomIt last ); template< class RandomIt, class Compare > void sort( RandomIt first, RandomIt last, Compare comp ); 当时对这些参数也不是很懂,只知道一些简单的用法. 1).比如: 如下代码可以使

走进C标准库(7)——"string.h"中函数的实现memcmp,memcpy,memmove,memset

我的memcmp: 1 int memcmp(void *buf1, void *buf2, unsigned int count){ 2 int reval; 3 while(count && !(reval = (*(unsigned char *)buf1) - (*(unsigned char *)buf2))) 4 { 5 buf1 = (unsigned char *)buf1 + 1; 6 buf2 = (unsigned char *)buf2 + 1; 7 --count

走进C标准库(8)——"string.h"中函数的实现相关字符串操作函数

我的strcat: 1 char *strcat(char *dest,char *src) 2 { 3 char * reval = dest; 4 while(*dest) 5 dest++; 6 while(*src) 7 *dest++ = *src++ ; 8 *dest = *src; 9 return reval; 10 } MSVC: 1 char * __cdecl strcat ( 2 char * dst, 3 const char * src 4 ) 5 { 6 char

Cpp11_2 sort 排序函数

sort函数声明: 1 #include <algorithm> 2 3 template< class RandomIt > 4 void sort( RandomIt first, RandomIt last ); 5 6 template< class RandomIt, class Compare > 7 void sort( RandomIt first, RandomIt last, Compare comp ); 一般,sort自带的排序算法比我们自己实现

java中Collections.sort() 排序函数的用法

用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: /*** 根据order对User排序*/public class User implements Comparable<User>{    private String name;    private Integer order;    public String getName() {        return name;    }    public void 

标准库Allocator(三)uninitialized_fill等函数的实现

前面我们使用了uninitialized_fill,来批量初始化某一段内存. 下面提供三个函数的实现代码,这三个代码的共同点是: 1.遇到错误,抛出异常 2.出现异常时,把之前构造的对象全部销毁 所以,这三个函数要么成功,要么无任何副作用.使用异常来通知使用者,所以在catch块中,处理完异常后要将异常再次向外抛出. #ifndef MEMORY_HPP #define MEMORY_HPP #include <iterator> template <typename ForwIter,

走进C标准库(6)——"string.h"中函数的实现memchr

我写的memchr: 1 void *memchr(const void *buf, char ch, unsigned count){ 2 unsigned int cnt = 0; 3 while(*(buf++) != ch && cnt <= count){cnt++;} 4 if(cnt > count) 5 return NULL; 6 else 7 return buf; 8 } 红色部分报错. 该错误为为ANSIC中认定的错误,是因为它坚持:进行算法操作的指针必

C++标准库之vector(各函数及其使用全)

原创作品,转载请注明出处:http://www.cnblogs.com/shrimp-can/p/5280566.html iterator类型: iterator:到value_type的访问,value_type是模板的类型 const_iterator:到const value_type的访问 reverse_iterator:reverse_iterator<iterator> const_reverse_iterator:reverse_iterator<const_itera

例题:机选双色球,用到集合,集合里的sort排序,for循环,.Next随机数。知识点很多

while (true) { Random r = new Random();//定义随机数 ArrayList red = new ArrayList();//集合类型可以放入 while (true) { if (red.Count == 6)//红球包含六个数 { break;//选出六个数就会选择跳出 } else { int temp = r.Next(1, 34);//随机选出一个红球 if (red.Contains(temp))//选出的红球和上一个红球重复 { } else {