按字典序排序

来源:互联网 发布:印刷如何打造网络接单 编辑:程序博客网 时间:2024/06/06 10:08

按字典顺序排序


主要思路

举个生动形象的例子,大小关系满足如此的一个序列:(小 < 大 > 中),将其作为初始状态。
1.从一个初始序列中,从后往前查找,找第一个满足a[i-1]<a[i] 的元素,将i-1记下来,即为小。也可以看出大之后的元素是由大到小的,是一个最大值的序列。
2.那么再从后往前查找,找第一个大于a[i-1] 的值,记住下标为k,即为中。
3.将i-1的值与k的值交换,此时 (中 大 小),而大之后的元素依然保持从大到小。
4.接着逆序i-1后面的所有值,刚好得出初始序列的下一个序列,(中 小 大)。

class Solution {public:    vector<string> Permutation(string str) {        vector<string> a;        if(str.size()==0) return a;        a.push_back(str);        int i;        int length=str.size()-1;        if(length==0) return a;        i=length;        while(i>0){            if(str[i-1]<str[i]){                int j=i-1;                int k;                for(k=length;k>=i;k--)                    {                    if(str[k]>str[j])                        break;                }                char t;                t=str[k];                str[k]=str[j];                str[j]=t;                fanzhuan(str,j+1);                a.push_back(str);                i=length;            }            else --i;        }        return a;    }    void fanzhuan(string &str,int i)    {        int j=str.size()-1;        for(i,j;i<j;i++,j--)        {            char t;            t=str[i];            str[i]=str[j];            str[j]=t;        }    }};
0 0
原创粉丝点击