TC官方合作论坛

 找回密码
 立即注册
查看: 2701|回复: 14

[讨论] 【求助编程高手】带重复数字的排序问题

[复制链接]
发表于 2014-10-1 21:26:55 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我有如下的字符型数据序列10个:92,90,43,40,30,38,22,20,05,01;
我需要将上述数据按十位数字从大到小排序且按个位从小到大排序,最终得到综合的排序序列:90,92,40,43,30,38,20,22,01,05。
自己编程基础差,脑子转不弯了,试了好几天还是没编出来!
求高手编写功能代码:

功能 综合排序(待排序字符串)
//待排序字符串为2位数字的,用逗号分隔的数字序列字符串串组合;
变量 综合排序=数组[10]
。。。。。。。
返回 综合排序
功能结束
回复

使用道具 举报

发表于 2014-10-2 09:05:35 | 显示全部楼层
联系我 qq1472750668
回复 支持 反对

使用道具 举报

发表于 2014-10-2 09:21:44 | 显示全部楼层
代码我已经写好了- -。
回复 支持 反对

使用道具 举报

发表于 2014-10-2 09:21:53 | 显示全部楼层
花了十分钟。。
回复 支持 反对

使用道具 举报

发表于 2014-10-2 09:47:42 | 显示全部楼层
将 字符串数字 分割成为数组
然后利用 数组空间里面的排序功能进行排序.
最后循环再输出数组成员,组成 字符串型式.
回复 支持 反对

使用道具 举报

发表于 2014-10-2 10:07:10 | 显示全部楼层

  1. function 综合排序(待排序字符串,排序的模式="1为从小到大,2为从大到小")
  2.     retArray1,retArray2,间隔标志=" ",组成值=null
  3.     ret=str.regexmatchtext("\\D+",待排序字符串,retArray1,false,true)
  4.     if(ret>0)
  5.         间隔标志=retArray1[0]
  6.     endif   
  7.     ret=str.regexmatchtext("\\d+",待排序字符串,retArray2)
  8.     if(ret>0)
  9.         if(排序的模式==1)
  10.             arraysp.sort(retArray2,2)
  11.         else
  12.             arraysp.sort(retArray2,3)
  13.         endif
  14.         for(i=0;i<ret;i++)
  15.             组成值&=retArray2[i]
  16.             if(i!=ret-1)
  17.                 组成值&=间隔标志
  18.             endif
  19.         endfor
  20.     endif   
  21.     return 组成值
  22. endfunction
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-10-2 11:08:28 | 显示全部楼层
本帖最后由 秋来潮汐 于 2014-10-2 11:20 编辑
  1. //92,90,43,40,30,38,22,20,05,100;
  2. var 排序 = array[10],中转 ,a,b
  3. 排序[0] = 92
  4. 排序[1] = 90
  5. 排序[2] = 43
  6. 排序[3] = 40
  7. 排序[4] = 30
  8. 排序[5] = 38
  9. 排序[6] = 22
  10. 排序[7] = 20
  11. 排序[8] = 05
  12. 排序[9] = 01
  13.   for(a=0;a<9;a++)
  14.       traceprint("a=="& a)
  15.       for(b=a+1;b<10;b++)
  16.           traceprint("b==" & b)
  17.           if(排序[a]<排序[b])
  18.               中转 = 排序[a]
  19.               排序[a] = 排序[b]
  20.               排序[b] = 中转
  21.           endif
  22.       endfor
  23.   endfor
  24.   for(i=0;i<10;i++)
  25.       traceprint(排序[i])
  26.   endfor
  27. 功能结束
复制代码
比如:排序1 2 3
for(a=0;a<2;a++)   
    for(b=a+1;b<3;b++)
        a==0时的比较:
        第一次比较:1 和 2 比较.2大,放前面,排序[0] = 2 ,变成 2 1 3
        第二次比较:2 和 3 比较 3大,放前面,排序[0] = 3,变成 3 1 2
        //注意:从始至终都是拿 排序[0] 中的数值 去和排序[1],排序[2]比较
        a==1时的比较:
        //和上面类似,拿 排序[1] 中的数值 去和后面的数一一比较,最后把几个数中最大的放到排序[1]里
    endfor
endfor

回复 支持 反对

使用道具 举报

发表于 2014-10-2 11:18:32 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-2 13:12:42 | 显示全部楼层
秋来潮汐 发表于 2014-10-2 11:08
比如:排序1 2 3
for(a=0;a

谢谢!但是看得我有些迷糊!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-2 13:16:23 | 显示全部楼层

用正则了吗?能解释下吗?没学好正则!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-9-28 10:43 , Processed in 0.037226 second(s), 22 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表