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排序方法目前就介绍到这里了。

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

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



    透过泪水看到希望
  • 相关阅读:
    SQL server 和Oracle 序列
    AD 域服务简介(一)- 基于 LDAP 的 AD 域服务器搭建及其使用(转)
    Windows Server 2008 R2 搭建DNS服务器(转)
    windows7下搭建HTTP服务器
    解决vcenter 6.0 vcsa安装插件时报错的问题
    Windows server 2008R2系统登录密码破解
    vmware Horizon 7 与远程桌面(mstsc)兼容性问题解决办法
    VCSA服务重启命令
    如何哄女朋友开心(转)
    快速搭建一个本地的FTP服务器 win10及win7
  • 原文地址:https://www.cnblogs.com/ronnielee/p/9495156.html
Copyright © 2011-2022 走看看