sort()函数详解

简介: sort()函数详解

一.sort函数是什么?

sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include<algorithm>的c++标准库中。


二.sort函数简介

语法

Sort(start,end,cmp)

参数

(1)start表示要排序数组的起始地址;

(2)end表示数组结束地址的下一位;

(3)cmp用于规定排序的方法,可不填,默认升序。

简单来说,第一个参数(start)就是需排序数组名+排序起始数在数组中的下标;第二个参数(end)即需排序数组名+排序起始数+排序数个数;第三个参数较为复杂,我等下再说……

功能

sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。

一般是直接对数组进行排序,例如对数组a[10]排序,sort(a,a+10)。而sort函数的强大之处在可与cmp函数结合使用,即排序方法的选择。

相对于普通的排序算法,sort()函数在快速排序(详见C++快速排序)的基础上,又进行了优化,时间复杂度为n*log2(n),执行效率较高。


三.sort()函数的CMP

1.无需修改,直接套用

sort函数没有第三个参数,实现的是从小到大(升序)排列:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
  int a[10];
  for(int i=0;i<10;i++) scanf("%d",&a[i]);
  sort(a,a+10);
  for(int i=0;i<10;i++) printf("%d",a[i]);
  return 0;
}

image.gif

2.较为简单的排序条件修改

#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int x,int y){
  return x % 10 > y % 10;
}
int main(){
  int num[10] = {65,59,96,13,21,80,72,33,44,99};
  sort(num,num+10,cmp);
  for(int i=0;i<10;i++){
    cout<<num[i]<<" ";
  }//输出结果:59 99 96 65 44 13 33 72 21 80
  return 0;
}

image.gif

3.较为复杂的排序条件自定义

比如每一个学生有四科成绩,我们需要根据学生的四科成绩的平均分高低进行排名,那么这个cmp函数我们就可以定义为:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct Student{
    string name;
    double score[4];
};
bool cmp_score(Student x,Student y){
    double average_x,average_y;
    average_x = (x.score[0]+x.score[1]+x.score[2]+x.score[3])/4;
    average_y = (y.score[0]+y.score[1]+y.score[2]+y.score[3])/4;
    return average_x > average_y;
}
int main(){
    Student stu[3];
    string n;
    int s;
    for(int i=0;i<3;i++){
        cin>>stu[i].name;
        for(int j=0;j<4;j++){
            cin>>stu[i].score[j];
        }
    }
    sort(stu,stu+3,cmp_score);
    for(int i=0;i<3;i++){
        cout<<stu[i].name<<" ";
        for(int j=0;j<4;j++){
            cout<<stu[i].score[j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

image.gif

总的来说,当CMP返回值为true(符合条件)时,无需交换;反之,返回值为false(不符合条件)时,需要交换。


四.总结

sort()函数是个很有用的妙招,希望大家善用!

相关文章
|
7月前
|
算法 搜索推荐 C++
【C++】sort()、stable_sort()和partial_sort()排序函数详解
【C++】sort()、stable_sort()和partial_sort()排序函数详解
170 0
|
7月前
|
存储 分布式计算 搜索推荐
sort-10-bigfile sort 大文件外部排序
这是一个关于排序算法系列的概述,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序和大文件外部排序。大文件排序通过文件拆分、独立排序、合并排序和优化合并步骤实现,尤其适用于不能一次性加载到内存中的数据。该方法的时间复杂度为O(n log n),空间复杂度为O(n)。文章提供了一个Java实现的`BigFileSort`类,用于大文件的排序操作。代码中使用了归并排序的策略进行合并,并考虑了磁盘I/O的影响。完整代码可在GitHub的开源项目中找到。
|
7月前
排序——sort的用法
排序——sort的用法
56 0
|
NoSQL Redis
SORT
SORT
102 0
|
算法 搜索推荐 编译器
排序函数qsort和sort那点事
排序函数qsort和sort那点事
148 0
|
搜索推荐 开发者 Python
sort 方法的使用 | 学习笔记
快速学习 sort 方法的使用
sort 方法的使用 | 学习笔记
|
Web App开发 算法 搜索推荐
数组的 sort() 方法详解
纸上得来终觉浅,绝知此事要躬行!
220 0
数组的 sort() 方法详解
|
算法 C++ Java
STL中排序函数的用法(Qsort,Sort,Stable_sort,Partial_sort,List::sort)
都知道排序很重要,也学了各式各样的排序算法,冒泡、插入、归并等等,但其实在ACM比赛中,只要不是太慢的算法,都可以适用(除非某些题目卡时间卡的很死),这个时候,速度与技巧便成了关键,而在C++的标准库中,就已经定义好了一些排序函数,下面来一一介绍它们吧=7= Qsort 函数原型为void qs...
2504 0