C++ 常用排序算法

发布于:2025-02-10 ⋅ 阅读:(38) ⋅ 点赞:(0)

排序算法

算法简介

sort // 对容器内元素进行排序
random_shuffle // 洗牌 指定范围内的元素随机调整次序
merge // 容器元素合并, 并存储到另一容器中
reverse // 反转指定范围内的元素

1. sort

功能:对容器内部分区间按某种规则进行排序

函数原型:

sort(iterator beg, iterator end, _Pr) 
按规则对区间[beg, end)内的元素进行排序
beg 区间开始迭代器
end 区间结束迭代器
_Pr 谓词
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;

// sort 

void myPrint(int val){
    cout << val << " ";
}

void test01()
{
    vector<int> v;
    v.push_back(80);
    v.push_back(20);
    v.push_back(60);
    v.push_back(40);
    v.push_back(50);

    // 默认排序规则为从小到大,进行降序排序
    sort(v.begin(), v.end());

    for_each(v.begin(), v.end(), myPrint);
    cout << endl;

    // 降序
    sort(v.begin(), v.end(), greater<int>());
    for_each(v.begin(), v.end(), myPrint);
    cout << endl;
}


int main(int argc, char const *argv[])
{
    test01();
    return 0;
}

2. random_shuffle

功能: 对容器中的元素进行随机打乱

函数原型:
random_shuffle(iterator start, iterator end, random number generator)

参数说明:
start:容器的起始迭代器
end:容器的结束迭代器
random number generator:随机数产生器

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;

// random_shuffle


void myPrint(int val){
    cout << val << " ";
}

void test01()
{
    // 随机数种子
    srand((unsigned int)time(NULL));

    vector<int> v;
    for (int i = 0; i < 10; i++)
    {
        v.push_back(i);
    }
    // 打乱顺序
    random_shuffle(v.begin(), v.end());
    for_each(v.begin(), v.end(), myPrint);
    cout << endl;
}


int main(int argc, char const *argv[])
{
    test01();
    return 0;
}

3. merge

功能: 两个容器元素合并,并存储到另一容器中

注意: 两个容器必须是有序的

函数原型:
merge(iterator first1, iterator last1, iterator first2, iterator last2, iterator result)

参数说明:
first1 第一个容器的开始迭代器
last1 第一个容器的结束迭代器
first2 第二个容器的开始迭代器
last2 第二个容器的结束迭代器
result 合并之后的容器的开始迭代器

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;

// merge

void myPrint(int val){
    cout << val << " ";
}

void test01()
{
    vector<int> v1;
    for (int i = 0; i < 10; i++){
        v1.push_back(i);
    }

    vector<int> v2;
    for (int i = 0; i < 10; i++){
        v2.push_back(i);
    }
    // 如果不是有序的,则合并后的结果是无序的
    v2.push_back(1);
    

    vector<int> vTarget;
    // 合并 目标容器需要提前开辟空间
    vTarget.resize(v1.size() + v2.size());
    // 合并
    merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
    // 遍历
    for_each(vTarget.begin(), vTarget.end(), myPrint);
    cout << endl;

    //  在排序
    sort(vTarget.begin(), vTarget.end());
    for_each(vTarget.begin(), vTarget.end(), myPrint);
    cout << endl;
}


int main(int argc, char const *argv[])
{
    test01();
    return 0;
}

4. reverse

功能: 将容器中的元素进行逆置

函数原型:
reverse(iterator first, iterator last);

参数说明:
first:开始迭代器
last:结束迭代器

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;

// reverse
void myPrint(int val){
    cout << val << " ";
}

void test01()
{
    vector<int> v;
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);
    v.push_back(50);
    for_each(v.begin(), v.end(), myPrint);
    cout << endl;
    // 翻转
    reverse(v.begin(), v.end());
    for_each(v.begin(), v.end(), myPrint);
    cout << endl;
}

int main(int argc, char const *argv[])
{
    test01();
    return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到