空间换时间——为字符串排序

来源:互联网 发布:大数据基础知识考试 编辑:程序博客网 时间:2024/05/16 09:14
//按字典序排列字符串//相同字母的大小写,小写放在大写的前面//例如:R,B,B,b,W,W,B,R,B,w//排序后:b,B,B,B,B,R,R,w,W,W//思路,空间换时间。//将字符串遍历,记录数量,然后按数量输出,时间复杂度为O(n)#include<iostream>#include<cstdio>#include<malloc.h>#include<memory.h>using namespace std;//实现功能的排序函数void sortByDic(char *a,int len){    int count[52];    for(int i=0;i<52;i++)    {        count[i]=0;    }    for(int i=0; i<len; i++)    {        if(a[i]>='A'&&a[i]<='Z')        {            count[(a[i]-'A')*2+1]++;//大写用奇数表示        }        if(a[i]>='a'&&a[i]<='z')        {            count[(a[i]-'a')*2]++;//小写用偶数表示        }    }    for(int i=0;i<52;i++)    {        if(count[i]!=0)        {            if(i%2==1)            {                char b=(char)((i-1)/2+'A');                for(int j=0; j<count[i];j++)                cout<<b;            }            if(i%2==0)            {                char b=(char)((i/2)+'a');                for(int j=0; j<count[i];j++)                cout<<b;            }        }    }}int main(){    char *a;    int n;    cout<<"输入字符数量:"<<endl;    cin>>n;    a = (char *)malloc(n*sizeof(char));    cout<<"输入字符:"<<endl;    cin>>a;    cout<<"排序后:"<<endl;    sortByDic(a,n);}

0 0
原创粉丝点击