TC官方合作论坛

标题: 【求助编程高手】带重复数字的排序问题 [打印本页]

作者: hjj_bbs    时间: 2014-10-1 21:26
标题: 【求助编程高手】带重复数字的排序问题
我有如下的字符型数据序列10个:92,90,43,40,30,38,22,20,05,01;
我需要将上述数据按十位数字从大到小排序且按个位从小到大排序,最终得到综合的排序序列:90,92,40,43,30,38,20,22,01,05。
自己编程基础差,脑子转不弯了,试了好几天还是没编出来!
求高手编写功能代码:

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

作者: rainshine    时间: 2014-10-2 09:05
联系我 qq1472750668
作者: rainshine    时间: 2014-10-2 09:21
代码我已经写好了- -。
作者: rainshine    时间: 2014-10-2 09:21
花了十分钟。。
作者: 小西    时间: 2014-10-2 09:47
将 字符串数字 分割成为数组
然后利用 数组空间里面的排序功能进行排序.
最后循环再输出数组成员,组成 字符串型式.
作者: 小西    时间: 2014-10-2 10:07

  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
本帖最后由 秋来潮汐 于 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


作者: rainshine    时间: 2014-10-2 11:18
http://rblog.cc/archives/1084
作者: hjj_bbs    时间: 2014-10-2 13:12
秋来潮汐 发表于 2014-10-2 11:08
比如:排序1 2 3
for(a=0;a

谢谢!但是看得我有些迷糊!
作者: hjj_bbs    时间: 2014-10-2 13:16
小西 发表于 2014-10-2 10:07

用正则了吗?能解释下吗?没学好正则!
作者: 秋来潮汐    时间: 2014-10-2 13:19
hjj_bbs 发表于 2014-10-2 13:12
谢谢!但是看得我有些迷糊!

排序【0】就是一个筐,里面有个萝卜,把这个萝卜拿出来跟另外两个筐的萝卜比较,分别比较两次,每次都把大的一个放到排序【0】这个筐里,这样不就得到这三个萝卜中最大的一个了吗?

第一个筐里的萝卜是三个萝卜里最大的后,再拿第二个筐里的(已经不是原来的那个萝卜了,注意)萝卜去跟第三个筐里的比较,大的放到第二个筐里,这样不就得出从大到小排序的萝卜了吗?
作者: hjj_bbs    时间: 2014-10-3 09:27
我的问题里有从大到小也有从小到大的混合混合排序!
作者: mkk1222    时间: 2014-10-3 11:23
参考 冒泡排序法,我C预言学的不太好,只能帮你倒这里了
作者: 小西    时间: 2014-10-3 12:46
秋来潮汐 发表于 2014-10-2 11:08
比如:排序1 2 3
for(a=0;a

既然前面花那么大功夫 当数字字符串 弄成数组,
然后 直接一个 数组排序就理工好了,还写那么多做什么.

函数空间: 中文:数组空间
英文:arraysp
函数描述: 对数组按照指定模式进行排序(只支持一维数组)
函数原型: 排序(array1,type=0)
sort(array1,type=0)
函数参数: array1: 数组名,这是一个可变类型,请填写正确的数组名,否则将获取失败
type: 排序的模式 0:ansci码从小到大排序 1:ansci码从大到小排序 2:按数字从小到大排序 3:按数字从大到小排序 4:倒序
返回值: 函数执行成功返回true,假返回false

作者: 小西    时间: 2014-10-3 12:47
hjj_bbs 发表于 2014-10-2 13:16
用正则了吗?能解释下吗?没学好正则!

将要 排序的 字符串数字 调用传入,就能返回排好序的结果.正则用了提数字,提字符串数字的分割标志.




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1