![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 12:28 |
共 48,038 主题排行 / 350,123 发帖 / 今日 1 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [讨论] 批处理中构造数组实现数字的有序排列 |
| 可打印版本 3,636 / 7 |
| 第1楼 pengfei | 发表于 2006-11-15 00:16 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
[讨论] 批处理中构造数组实现数字的有序排列 突然想用批处理对数字进行排序. 以前我们是对几个数字分别进行比对, 按照大小排列出来, 但处理的个数很小, 数字超过10个代码就会很冗长, 并且效率比较低.
如果批处理有像高级语言中数组类型的概念就好了, 但很遗憾. 在批处理中人工构造一个数组, 这个问题就好解决了. 于是写了以下代码, 可以对N个数字进行大到小或小到大的排序. 只需要改变IF语句中的"lss"或"gtr". 测试代码: [ Last edited by pengfei on 2006-11-15 at 06:54 AM ] |
|
| 第2楼 redtek | 发表于 2006-11-15 00:43 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
欣赏~~:)
|
|
| 第3楼 vkill | 发表于 2006-11-15 01:28 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
可以先判断位数,这样效率应该会高些
|
|
| 第4楼 pengfei | 发表于 2006-11-15 01:32 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
RE: vkill
代码中不单有判断位数的功能, 还对次数循环做了精确控制, 执行效率是比较理想的. [ Last edited by pengfei on 2006-11-20 at 08:48 AM ] |
|
| 第5楼 ccwan | 发表于 2006-11-15 01:39 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
确实不错。
|
|
| 第6楼 youxi01 | 发表于 2006-11-15 08:11 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
看看我们的“天才”斑竹的测试代码(好象是37.....斑竹):
@echo off setlocal enabledelayedexpansion set numbers=%random% %random% %random% %random% %random% %random% %random% %random% echo 排序前数组为: %numbers% call :sort %numbers% echo 排序后数组为: %ret% pause goto :eof :sort set num=%1 set str=%* for %%i in (%str%) do if !num! gtr %%i set num=%%i set ret=%ret% %num% if not "!str:%num%=!" == "" call :sort !str:%num%=! goto :eof 是不是效率更高呢!针对十进制/ 以下是由以上代码改进来的“应用型”代码: @echo off color 1f if "%1"=="" goto :instruction setlocal enabledelayedexpansion for %%i in (%1 %2 %3 %4 %5 %6 %7 %8 %9) do ( if not "%%i"=="" set number=!number! %%i) call :sort %number% echo. echo 以上数字由大到小依次为: echo. echo %str% pause>nul :instruction cls echo. echo 数字排序 echo. echo ============================================================ echo 说明: echo 该程序只能说基本达到要求;没有对数字进行过滤; echo 目前只支持最多9个数字的排序! echo. echo 使用方法如下:[%~nx0] [%%1] [%%2] [%%3] [%%4] ........ echo ============================================================= echo. cmd /k :sort set var=%1 set var_=%* for %%i in (%var_%) do ( if !var! leq %%i set var=%%i) set str=!str! !var! set var_=!var_:%var%=! if not "%var_%"=="" call :sort %var_% |
|
| 第7楼 3742668 | 发表于 2006-11-15 08:40 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
Re youxi01:
解决9个参数的限制可以尝试用shift。 当然,更好的方法则是把你的代码中setlocal enabledelayedexpansion下面的那个for语句替换为: set "number=%*" |
|
| 第8楼 pengfei | 发表于 2006-11-15 09:40 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
看了3742668版主这段代码, 令我佩服不已...
显然这种通过把数字用空格间隔排列起来构造数组的方法更简单. 再通过for /f 命令将数组元素一个个读取再比对. 不但速度更快代码也简洁, 学习了... |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |