[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
联盟里的3742斑竹也曾经写过sort函数,他是递归调用,经测试,他的代码执行效率比上段代码要高。
经粗略分析,以上代码虽然避开了call的调用,但是因为采用了大量的for循环(还存在循环嵌套),这种方法就会导致一个问题:数据越多,效率就会拖得越慢,但是递归调用几乎不受数字数目影响,不过以上方法也有它的优点:1、参数数目不受限制;2、支持相等的数字等。

附:根据3742斑竹改的代码:
  1. @echo off
  2. color 1f
  3. if "%1"=="" goto :instruction
  4. setlocal enabledelayedexpansion
  5. for %%i in (%1 %2 %3 %4 %5 %6 %7 %8 %9) do (
  6.   if not "%%i"==""  set number=!number! %%i)
  7. call :sort %number%
  8. echo.
  9. echo 以上数字由大到小依次为:
  10. echo.
  11. echo      %str%
  12. pause>nul
  13. :instruction
  14.    cls
  15.    echo.
  16.    echo                          数字排序
  17.    echo.
  18.    echo ============================================================
  19.    echo 说明:
  20.    echo      该程序只能说基本达到要求;没有对数字进行过滤;
  21.    echo 目前只支持最多9个数字的排序!
  22.    echo.
  23.    echo 使用方法如下:[%~nx0] [%%1] [%%2] [%%3] [%%4] ........
  24.    echo =============================================================
  25.    echo.
  26.    cmd /k
  27. :sort
  28.    set var=%1
  29.    set var_=%*
  30.    for %%i in (%var_%) do (
  31.        if !var! leq %%i set var=%%i)
  32.    set str=!str! !var!
  33.    set var_=!var_:%var%=!
  34.    if not "%var_%"=="" call :sort %var_%
复制代码

TOP

对了,还有一个就是想说的,当数值不在 批处理 范围之内的排序的问题啊,也可以封装成一个函数/////

TOP

原帖由 随风 于 2007-11-20 16:46 发表
2楼的代码速度虽快,但有几个缺点
1、最小的数若有2个或2个以上,代码会进入死循环。
2、代码并不受9个参数的影响,可以是N个。
3、以上代码不能作为函数,带入到别的代码中。


前面的两点赞同,后面的一点 保留 意见...

TOP

返回列表