联盟里的3742斑竹也曾经写过sort函数,他是递归调用,经测试,他的代码执行效率比上段代码要高。
经粗略分析,以上代码虽然避开了call的调用,但是因为采用了大量的for循环(还存在循环嵌套),这种方法就会导致一个问题:数据越多,效率就会拖得越慢,但是递归调用几乎不受数字数目影响,不过以上方法也有它的优点:1、参数数目不受限制;2、支持相等的数字等。
附:根据3742斑竹改的代码:
- @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_%
复制代码
|