TC官方合作论坛

 找回密码
 立即注册
查看: 1282|回复: 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]
。。。。。。。
返回 综合排序
功能结束
回复

使用道具 举报

15#
发表于 2014-10-3 12:47:23 | 只看该作者
hjj_bbs 发表于 2014-10-2 13:16
用正则了吗?能解释下吗?没学好正则!

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

使用道具 举报

14#
发表于 2014-10-3 12:46:19 | 只看该作者
秋来潮汐 发表于 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
回复 支持 反对

使用道具 举报

13#
发表于 2014-10-3 11:23:50 | 只看该作者
参考 冒泡排序法,我C预言学的不太好,只能帮你倒这里了
回复 支持 反对

使用道具 举报

12#
 楼主| 发表于 2014-10-3 09:27:02 | 只看该作者
我的问题里有从大到小也有从小到大的混合混合排序!
回复 支持 反对

使用道具 举报

11#
发表于 2014-10-2 13:19:51 | 只看该作者
hjj_bbs 发表于 2014-10-2 13:12
谢谢!但是看得我有些迷糊!

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

第一个筐里的萝卜是三个萝卜里最大的后,再拿第二个筐里的(已经不是原来的那个萝卜了,注意)萝卜去跟第三个筐里的比较,大的放到第二个筐里,这样不就得出从大到小排序的萝卜了吗?
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2014-10-2 13:16:23 | 只看该作者

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

使用道具 举报

9#
 楼主| 发表于 2014-10-2 13:12:42 | 只看该作者
秋来潮汐 发表于 2014-10-2 11:08
比如:排序1 2 3
for(a=0;a

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

使用道具 举报

8#
发表于 2014-10-2 11:18:32 | 只看该作者
回复 支持 反对

使用道具 举报

7#
发表于 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

回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

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

GMT+8, 2025-9-25 08:03 , Processed in 0.233285 second(s), 23 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

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