C++ sort() 底层逻辑

文章目录

  • 文章背景
  • 阅读本文的前置知识
  • 正文
    • sort函数的第二个参数
    • 对vector容器使用sort函数

文章背景

因这篇文章当中讲述的sort函数内容有一定的纰漏,而该文章处于谷歌搜索结果的第一位,故笔者记录本文作为笔记。

阅读本文的前置知识

  • 了解C++ 的基本用法

正文

使用sort()函数需要的头文件为algorithm
sort函数的第一个参数为
目标数组的,需要开始排列的地址
第二个参数为本文描述的重点

sort函数的第二个参数

以简单方式理解的话:

sort的排列区间为左闭右开区间:[第一个参数所对应的地址,第二个参数所对应的地址)
C++ sort() 底层逻辑_第1张图片

也就是说,如下示例代码是符合预期的:

int a[100];
....  //通过某些方式输入20个数字,分别对应a[0]到a[19]
sort(a,a+20);       //将下标为0到19的元素进行排列

而sort()本质上的逻辑关系,请看下图:

C++ sort() 底层逻辑_第2张图片
int x[5]为例,每个元素的数据宽度为4,当引用第一个元素(&a[0])的地址时,实际上引用的是数据头部的地址

由于数组所占用的虚拟地址空间是连续的,因此,向sort传递第二个参数时,如果传递的参数是第五个元素的地址,那么实际传递的参数是第五个元素的数据头的地址(与第四个元素的数据尾的地址相同)

于是,sort函数的作用范围在宏观上便是左闭右开区间:[第一个参数所对应的地址,第二个参数所对应的地址)

对vector容器使用sort函数

vector容器内置的方法.end()返回的地址为最后一个元素的尾地址,请看下图:
C++ sort() 底层逻辑_第3张图片
因此,以下代码是符合预期的

sort(x.begin(),x.end());

你可能感兴趣的:(c++,排序算法,排序,数据结构)