C++如何进行sort的使用——C++如何进行排序

简介: C++如何进行sort的使用——C++如何进行排序

C++如何进行sort的使用——C++如何进行排序

简介

简介:

sort()函数,是c++中自带的一个排序方法,它不仅仅是一个简单的快速排序,而是对快速排序的一个优化,它结合了插入排序和堆排序,根据数据量的不同,他会自动选用适合的排序方法。

当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序。

引用:

sort()函数需要使用#include<algorithm>头文件。

代码演示

基本使用方法

sort()的完整方法是,sort(beg,end,cmd),beg是第一个元素的指针,end是最后一个元素的下一个元素的指针,所以这个sort它是一个左闭右开的,然后这个cmd是一个排序方法,可以不写,如果不写的话默认的是递增排序。

如果想要递减排序的话,需要写这个参数greater<int>(),<>这个括号里面的存放的是排序过程中的数据类型,还可以写double,float,long。

我们演示一下默认的排序方式,与递减的排序方式。

  • 默认排序
    在默认方法中,我们可以看见,对于sort方法没有写排序规则cmp。
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
  int num[10] = {6, 5, 9, 1, 2, 8, 7, 3, 4, 0};
  sort(num,num+10);
  for(int i = 0;i < 10; i ++)
  {
    cout << num[i] << " ";
  }
  // 运行结果
  //0 1 2 3 4 5 6 7 8 9 
  return 0;
} 
  • greater<int>()排序
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
  int num[10] = {6, 5, 9, 1, 2, 8, 7, 3, 4, 0};
  sort(num, num + 10, greater<int>());
  for(int i = 0;i < 10; i ++)
  {
    cout << num[i] << " ";
  }
  // 运行结果
  //9 8 7 6 5 4 3 2 1 0 
  return 0;
} 

自定义规则排序

这里我通过一个案例进行讲解。

案例:我们现在希望有一个排序规则,我希望奇数排在偶数前面。

通过这个结果我们发现了,排序结果中奇数在前面偶数在后面,这里主要难写的地方就是这个func函数。

实现代码

#include<iostream>
#include<algorithm>
using namespace std;
bool func(int a, int b)
{
    a = a % 2 == 0 ? 1 : 0;
    b = b % 2 == 0 ? 1 : 0;
    return a < b;
}
int main(){
  int num[10] = {6, 5, 9, 1, 2, 8, 7, 3, 4, 0};
  sort(num, num + 10, func);
  for(int i = 0;i < 10; i ++)
  {
    cout << num[i] << " ";
  }
  // 运行结果
  //5 9 1 7 3 6 2 8 4 0 
  return 0;
} 

对结构进行排序

常见的是对一个学生类进行排序,这个学生类含有的数据类型有,score,num,对成绩相同的,学号小的排在前面。

首先封装一个结构体

struct Student{
  int num;
  int score;
  Student() {}
  Student(int num,int score):num(num),score(score) {}
};

案例的完整代码

#include<iostream>
#include<algorithm>
using namespace std;
struct Student{
  int num;
  int score;
  Student() {}
  Student(int num,int score):num(num),score(score) {}
};
bool func(Student x,Student y){
  if(x.score == y.score) return x.num < y.num;
  return x.score< y.score;
}
int main(){
  Student stu[3];
  stu[0] = Student(111,100);
  stu[1] = Student(110,100);
  stu[2] = Student(112,101);
  sort(stu,stu+3,func);
  for (int i = 0; i < 3; ++ i)
  {
      cout << "num:" << stu[i].num << " score:" << stu[i].score << endl;
  }
  return 0;
}

运行结果

num:110 score:100

num:111 score:100

num:112 score:101

目录
打赏
0
0
0
0
48
分享
相关文章
【C++数据结构——内排序】二路归并排序(头歌实践教学平台习题)【合集】
本关任务是实现二路归并算法,即将两个有序数组合并为一个有序数组。主要内容包括: - **任务描述**:实现二路归并算法。 - **相关知识**: - 二路归并算法的基本概念。 - 算法步骤:通过比较两个有序数组的元素,依次将较小的元素放入新数组中。 - 代码示例(以 C++ 为例)。 - 时间复杂度为 O(m+n),空间复杂度为 O(m+n)。 - **测试说明**:平台会对你编写的代码进行测试,提供输入和输出示例。 - **通关代码**:提供了完整的 C++ 实现代码。 - **测试结果**:展示代码运行后的排序结果。 开始你的任务吧,祝你成功!
105 10
【C++数据结构——内排序】希尔排序(头歌实践教学平台习题)【合集】
本文介绍了希尔排序算法的实现及相关知识。主要内容包括: - **任务描述**:实现希尔排序算法。 - **相关知识**: - 排序算法基础概念,如稳定性。 - 插入排序的基本思想和步骤。 - 间隔序列(增量序列)的概念及其在希尔排序中的应用。 - 算法的时间复杂度和空间复杂度分析。 - 代码实现技巧,如循环嵌套和索引计算。 - **测试说明**:提供了测试输入和输出示例,帮助验证代码正确性。 - **我的通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了代码运行的测试结果。 通过这些内容,读者可以全面了解希尔排序的原理和实现方法。
93 10
|
3月前
|
【C++数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】
快速排序是一种高效的排序算法,基于分治策略。它的主要思想是通过选择一个基准元素(pivot),将数组划分成两部分。一部分的元素都小于等于基准元素,另一部分的元素都大于等于基准元素。然后对这两部分分别进行排序,最终使整个数组有序。(第一行是元素个数,第二行是待排序的原始关键字数据。本关任务:实现快速排序算法。开始你的任务吧,祝你成功!
80 7
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
76 5
|
10月前
|
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
126 1
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
浅谈sort函数底层(一道c++面试的天坑题)
浅谈sort函数底层(一道c++面试的天坑题)
拓扑排序解析:计算机与数学的交汇点以及C++ 实现
拓扑排序解析:计算机与数学的交汇点以及C++ 实现
237 0

热门文章

最新文章