C++ 排序函数sort()

要使用此函数只需用 #include < algorithm>, sort()即可使用,语法描述为:
sort(begin,end),表示一个范围,例如:

string s[21]; 
for(int i=0;i <20;i++) 
    cin>>s[i]; 
sort(s,s+20);

输出结果将是把数组s按升序排序,说到这里可能就有人会问怎么样用它降序排列呢?这就是下一个讨论的内容.
一种是自己编写一个比较函数来实现,接着调用三个参数的sort:sort(begin,end,compare)就成了。对于list容器,这个方法也适用,把compare作为sort的参数就可以了,即:sort(compare).

假如说要实现这么一个功能:

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
        string ret;
        if(numbers.empty())
            return ret;

        vector<string> p;
        for(int i = 0; i < numbers.size(); i++){
            p.push_back(to_string(numbers[i]));
        }

        sort(p.begin(), p.end(), cmp);

        for(int i = 0; i < numbers.size(); i++){
            ret += p[i];
        }
        return ret;

    }

    static bool cmp(string a, string b){  //这儿的static不要忘!
        string aa = a + b;
        string bb = b + a;
        return aa < bb;
    }
};

上面的程序也可以这么来实现:

class Solution {
public:

    string PrintMinNumber(vector<int> numbers) {
        string ret;
        if(numbers.empty())
            return ret;

        string *p = new string[numbers.size()]; //申请一个大小为numbers.size()的string数组空间;
        for(int i = 0; i < numbers.size(); i++){
            p[i] = to_string(numbers[i]);
        }

        sort(p, p + numbers.size(), cmp);

        for(int i = 0; i < numbers.size(); i++){
            ret += p[i];
        }
        return ret;

    }

    static bool cmp(string a, string b){ //这儿的static不要忘!
        string aa = a + b;
        string bb = b + a;
        return aa < bb;
    }

};

还可以对string内的字符进行排序:

string a;
sort(a.begin(),a.end());
bool rule(char a,char b){
    return a>b;
}

string a;
sort(a.begin(), a.end(), rule);

参考:https://zhidao.baidu.com/question/2206325432076996388.html

猜你喜欢

转载自blog.csdn.net/baidu_35679960/article/details/80358535