zoukankan      html  css  js  c++  java
  • STL的sort排序

    STL的sort排序

    日常我们在对数据处理时,经常会用到排序算法。其中,sort排序的由于简洁高效等特点深受人们喜爱(时间复杂度仅为O(NlogN)。下面简单介绍sort排序。

    头文件

    #include<algotirhm>

    下面依次介绍sort排序在普通一维数组、结构体以及在类中的应用。

    一维数组中的应用

    对于从data【N】,假设data数组从data【0】开始赋值并对前n个值排序:

    sort(data,data+n);

    假设data数组从data【1】开始赋值并对前n个值排序:

    sort(data+1,data+n+1);

    假设data数组需要对data【a】及其后面的数,总共b个,进行排序:

    sort(data+a,data+b);

    结构体中的应用

    推荐博主前面的文章。一道水题,用结构体进行排序。

    https://blog.csdn.net/ronnie14165/article/details/80790781

    核心代码贴一下:

    struct milk
    {
    int cost;
    int num;
    }p[N];
    bool cmp(milk x,milk y)
    {
    	return x.cost < y.cost;
    }
    ...
    sort(p,p+man_num,cmp);

    类中的应用

    对类的不同对象以不同的顺序进行排序。其中,以背包为类创造两个对象,价值以及数量。

    以价值为标准进行排序:通过重载运算符<,对于背包的价值直接用sort(vec.begin(),vec.end());进行排序。

    以数量为标准进行排序:通过定义比较函数,对于背包的数量直接用sort(vec.begin(),vec.end(),by_amount);进行排序。

    PS:解释一下奇怪的数据knapsack temp(3*i+1,3*i*i-30*i+100),博主不想让背包的价值和数量在输入上就呈正相关,就构造了一个极点在区间内的二次函数。

    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    class knapsack
    {
    public:
        knapsack(int a,int b):value(a),amount(b){	}
        int value,amount;
        bool operator < (const knapsack &x) const{return value<x.value;}
    };
    bool by_amount(const knapsack & x,const knapsack & y)
    {return x.amount<y.amount;}
    bool by_amount_large_to_small(const knapsack & x,const knapsack & y)
    {return x.amount>y.amount;}
    int main()
    {
    	vector<knapsack> vec;
    	for(int i = 0 ; i < 10 ; i++)
    	{
    		knapsack temp(3*i+1,3*i*i-30*i+100);
    		vec.push_back(temp);
    	}
    	cout << "Print the original sequence"<<endl;
    	for(int i = 0 ; i < 10 ; i++)
    	cout << "(" << vec[i].value << " ," << vec[i].amount << ")" <<endl;
    	sort(vec.begin(),vec.end());
    	cout << "Sort by value from small to large"<<endl;
    	for(int i = 0 ; i < 10 ; i++)
    	cout << "(" << vec[i].value << " ," << vec[i].amount << ")" <<endl;
    	sort(vec.begin(),vec.end(),by_amount);
    	cout << "Sort by amount from small to large"<<endl;
    	for(int i = 0 ; i < 10 ; i++)
    	cout << "(" << vec[i].value << " ," << vec[i].amount << ")" <<endl;
    	sort(vec.begin(),vec.end(),by_amount_large_to_small);
    	cout << "Sort by amount from large to small"<<endl;
    	for(int i = 0 ; i < 10 ; i++)
    	cout << "(" << vec[i].value << " ," << vec[i].amount << ")" <<endl;
        return 0;
    }

    输出:

    (7 ,52)
    (10 ,37)
    (13 ,28)
    (16 ,25)
    (19 ,28)
    (22 ,37)
    (25 ,52)
    (28 ,73)
    Sort by value from small to large
    (1 ,100)
    (4 ,73)
    (7 ,52)
    (10 ,37)
    (13 ,28)
    (16 ,25)
    (19 ,28)
    (22 ,37)
    (25 ,52)
    (28 ,73)
    Sort by amount from small to large
    (16 ,25)
    (13 ,28)
    (19 ,28)
    (10 ,37)
    (22 ,37)
    (7 ,52)
    (25 ,52)
    (4 ,73)
    (28 ,73)
    (1 ,100)
    Sort by amount from large to small
    (1 ,100)
    (4 ,73)
    (28 ,73)
    (7 ,52)
    (25 ,52)
    (10 ,37)
    (22 ,37)
    (13 ,28)
    (19 ,28)
    (16 ,25)

    对于sort排序方法目前就介绍到这里了。

    这篇博文现在还不够完善,明天再更一下。

    写在最后,希望博主能够保持自我,暑训加油啦!



    透过泪水看到希望
  • 相关阅读:
    双重检查锁定(Double-Checked Locking)与延迟初始化(Lazy Initialization)
    Spring Cloud Zookeeper搭建实例
    Spring Boot读取properties
    快速搭建单机版Spring Cloud EurekaServer
    MyBatis PageHelper分页插件
    MyBatis Generator 逆向工程插件
    快速搭建单机版Spring Cloud EurekaServer
    什么是JWT令牌认证?
    Spring Boot高频面试题:Spring Boot执行原理
    SOLID原则都不知道,还敢说自己是搞开发的!
  • 原文地址:https://www.cnblogs.com/ronnielee/p/9495156.html
Copyright © 2011-2022 走看看