免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 13634 | 回复: 12

数字字符串 我怎么进行比较排序? [复制链接]

论坛徽章:
0
发表于 2009-01-21 08:02 |显示全部楼层
请教一问题  谢!:
如下行字符串  我怎么进行比较排序?
按照数字有大到小的顺序排列?

6030200001801100000345
6030200001801100000446
6030200001801100000749
6030200001801100000850
6030200001801100001039
764321111              
724484020              
114121695              
773614709              
792503385              
738456186              
6030200001801100003639
761251605              
78031275X              
6030200001801200000649
767613953              
754804814              
744023598

论坛徽章:
0
发表于 2009-01-21 08:20 |显示全部楼层
strcmp

论坛徽章:
0
发表于 2009-01-21 08:22 |显示全部楼层

回复 #1 zouhu_cn 的帖子

带X的不是十六进制吧?可以先按位数(首数字如果为0则不算一位,比如01000,那么是4位)排序,然后在相同位数的数字内,从高到低比较,随便用什么排序算法。

论坛徽章:
0
发表于 2009-01-21 08:45 |显示全部楼层
先计算每个字符串代表数据的有效位数,位数越多数据自然越大
遇到位数相同的,一位一位比较

论坛徽章:
0
发表于 2009-01-21 08:46 |显示全部楼层
原帖由 zhuhefang2006 于 2009-1-21 08:45 发表
先计算每个字符串代表数据的有效位数,位数越多数据自然越大
遇到位数相同的,一位一位比较

兄弟,6030200001801100001039 一看就不是数字。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
发表于 2009-01-21 09:30 |显示全部楼层
sort(str,str+n,cmp),写一个比较函数就可以了

论坛徽章:
0
发表于 2009-01-21 10:04 |显示全部楼层
原帖由 zouhu_cn 于 2009-1-21 08:02 发表
请教一问题  谢!:
如下行字符串  我怎么进行比较排序?
按照数字有大到小的顺序排列?

6030200001801100000345
6030200001801100000446
6030200001801100000749
6030200001801100000850
60302000 ...



晕,楼主连排序依据和规则也不确定?
如果只按大小排序,且是c++的话,直接用STL。
如果是C字符串的话,用字符串初始化string,然后直接将string加入set<string>容器即可。之后正向遍历set容器,就是从小到大的排序。不用写任何排序算法,超级简单。
具体算法和下面这篇帖子类似,我就不另外写了。

http://bbs.chinaunix.net/viewthread.php?tid=1351993&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D134
不写排序算法或排序处理的排序"原理"参见该篇贴子2楼的说明。

论坛徽章:
0
发表于 2009-06-20 10:21 |显示全部楼层
:wink:

论坛徽章:
0
发表于 2009-06-20 11:10 |显示全部楼层
#include<stdio.h>
#include<algorithm>
struct node
{
    int len;
    char str[50];
}list[50];
int i,n;
bool cmp(node s,node t)
{
    if (s.len!=t.len) return s.len<t.len;
    else return strcmp(s.str,t.str)<0;
}
int main()
{
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        scanf("%s",list[i].str);
        list[i].len=strlen(list[i].str);
    }
    std::sort(list,list+n,cmp);
    return 0;
}

顺手写一个,n是个数,自己读入,你的例子里面是18

论坛徽章:
0
发表于 2009-06-21 12:30 |显示全部楼层
算法是你定的,如果你都不知道怎么排,那计算机就更不知道了。

cat unsorted.txt | sort > sorted.txt
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP