迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

在 C++ 标准模板库(STL) 中排序

作者:迹忆客 最近更新:2023/03/15 浏览次数:

在本文章中,我们将学习一个广泛使用的 C++ 函数,称为 sort()。我们还将查看与排序相关的其他功能。

为了在 C++ 中对数据进行排序,我们编写算法并将其应用于数据,或者我们可以使用 C++ STL 中的内置函数 sort()sort() 函数在 algorithm 头文件中定义。

此函数使用 IntroSort 算法,这是一种混合排序算法,它使用三种排序算法,快速排序、堆排序和插入排序,以最大限度地减少运行时间。

此函数对给定范围的元素进行排序。

语法:

sort(start iterator, end iterator, compare_function)

默认情况下,这将按升序对开始迭代器和结束迭代器定义的范围内的元素进行排序(这是默认的 compare_function)。

在 C++ 中使用 sort() 函数对数组或 STL 容器进行排序

排序是对数据执行的基本操作之一。我们以递增、递减或用户定义(自定义排序)的方式排列数据。

我们可以在 C++ 中使用 sort() 函数对数组或 STL 容器(如 vector、set、map 等)进行排序。

#include <algorithm>
#include <iostream>
using namespace std;

int main()
{
    int arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };

    //array size
    int n = sizeof(arr) / sizeof(arr[0]);

    vector<int> v{35,67,11,-9,7,-22}; //vector

    cout << "The array  after sorting is : \n";

    sort(arr, arr + n);
    sort(v.begin(),v.end()); //sorting vector

    for (int i = 0; i < n; ++i)
        cout << arr[i] << " ";

    cout<<endl;

    cout << "The vector after sorting is : \n";
    for (int i = 0; i <v.size(); ++i)
        cout << v[i] << " ";
}

输出:

The array  after sorting is :
0 1 2 3 4 5 6 7 8 9
The vector after sorting is :
-22 -9 7 11 35 67

默认情况下,项目按升序排列。

在 C++ 中按降序对数组进行排序

要按降序对 C++ STL 中存在的数组或容器进行排序,我们必须在 sort() 函数中传递名为 greater<type>() 的第三个参数。此函数执行比较,以便最后的元素按降序排序。

Type 指的是我们正在使用的数组或容器的类型,int、float 或 string 类型。

#include <algorithm>
#include <iostream>
using namespace std;

int main()
{
    int arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };

    //array size
    int n = sizeof(arr) / sizeof(arr[0]);

    vector<int> v{35,67,11,-9,7,-22}; //vector

    cout << "The array  after sorting is : \n";

    sort(arr, arr + n,greater<int>());
    sort(v.begin(),v.end(),greater<int>()); //sorting vector

    for (int i = 0; i < n; ++i)
        cout << arr[i] << " ";

    cout<<endl;

    cout << "The vector after sorting is : \n";
    for (int i = 0; i <v.size(); ++i)
        cout << v[i] << " ";
}

输出:

The array  after sorting is :
9 8 7 6 5 4 3 2 1 0
The vector after sorting is :
67 35 11 7 -9 -22

使用 partial_sort() 函数对数组或向量的一部分进行排序

我们可以使用 partial_sort() 对数组的某些部分进行排序。这种方法只不过是原始排序方法的变体

语法:

partial_sort(first, middle, last)

它重新排列范围(firstlast)中的元素,以便中间之前的元素按升序排序,中间之后的元素没有任何特定顺序。

#include <algorithm>
#include <iostream>
using namespace std;

int main()
{

   vector<int> vr{35,67,11,-9,7,-22}; //vector

    cout << "The vector after partial sorting is : \n";

    partial_sort(vr.begin(),vr.begin()+2,vr.end());

    for (int i = 0; i < vr.size(); ++i)
        cout << vr[i] << " ";
}

输出:

The vector after partial sorting is :
-22 -9 67 35 11 7

我们可以观察到只有前两个元素被排序,剩下的只是以某种随机顺序出现。

使用 C++ 中的 sort() 函数的用户定义或自定义排序

只要我们想对数据进行升序或降序排序,都可以使用这个函数,但有时我们希望数据以用户自定义的方式排序。

在这里,我们必须编写自定义排序函数,我们将作为第三个参数传递给 sort() 函数。

#include <algorithm>
#include <iostream>
using namespace std;

bool myfunction(string x, string y)
{
	return x.size() < y.size() ;
}

int main()
{
    string str[]={"a" ,"abc", "ba" , "abcd"};
    int n = 4;

    sort(str, str+n); //normal sort function
    cout << "Array after sorting : \n";
    for (int i = 0; i < n; ++i)
        cout << str[i] << " ";

    cout<<endl;

    sort(str,str+n,myfunction);
     cout << "Array after user defined sorting : \n";
    for (int i = 0; i < n; ++i)
        cout << str[i] << " ";
}

输出:

Array after sorting :
a abc abcd ba
Array after user defined sorting :
a ba abc abcd

第一种排序方法默认按字典升序对字符串数组进行排序。第二种排序方法根据字符串的长度对字符串进行排序,即我们在名为 myfunction 的自定义比较函数中提到的条件。

在 C++ 中使用 is_sorted() 方法

如果我们想检查给定范围的数据是否排序,我们可以使用这种方法。

#include <algorithm>
#include <iostream>
using namespace std;

int main()
{

  vector<int> v{35,67,11,-9,7,-22}; //vector

  cout<<is_sorted(v.begin(), v.end());

}

输出:

0

由于向量没有排序,我们得到的输出为 0,意思是

排序算法的时间复杂度

sort() 的时间复杂度为 O(NlogN),其中 N 是应用 sort() 函数的元素的数量。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C++ 中通过掷骰子生成随机值

发布时间:2023/04/09 浏览次数:169 分类:C++

本文解释了如何使用时间因子方法和模拟 C++ 中的掷骰子的任意数方法生成随机数。了解它是如何工作的以及它包含哪些缺点。提供了一个 C++ 程序来演示伪数生成器。

在 C++ 中使用模板的链表

发布时间:2023/04/09 浏览次数:158 分类:C++

本文解释了使用模板在 C++ 中创建链表所涉及的各个步骤。工作程序演示了一个链表,该链表使用模板来避免在创建新变量时声明数据类型的需要。

在 C++ 中添加定时延迟

发布时间:2023/04/09 浏览次数:142 分类:C++

本教程将为你提供有关在 C++ 程序中添加定时延迟的简要指南。这可以使用 C++ 库为我们提供的一些函数以多种方式完成。

在 C++ 中创建查找表

发布时间:2023/04/09 浏览次数:155 分类:C++

本文重点介绍如何创建查找表及其在不同场景中的用途。提供了三个代码示例以使理解更容易,并附有代码片段以详细了解代码。

如何在 C++ 中把字符串转换为小写

发布时间:2023/04/09 浏览次数:63 分类:C++

介绍了如何将 C++ std::string 转换为小写的方法。当我们在考虑 C++ 中的字符串转换方法时,首先要问自己的是我的输入字符串有什么样的编码

如何在 C++ 中确定一个字符串是否是数字

发布时间:2023/04/09 浏览次数:163 分类:C++

本文介绍了如何检查给定的 C++ 字符串是否是数字。在我们深入研究之前,需要注意的是,以下方法只与单字节字符串和十进制整数兼容。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便