• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    出给新手的数值排序加分题
    出题目的:
    掌握任意数列之间的排序技巧
    解题要求:
    代码通用、高效
    尽量简洁
    尽量不生成临时文件
    加分规则:
    1 思路独特基准分5分
    2 代码高效、通用基准分4分
    3 技巧高超基准分3分
    4 代码简洁基准分2分
    5 完美代码加分15分
    题目如下:
    给出任意一组数列,正序输出,如:
    3 2008 11 19 777 23 2014 453 789 51
    输出为:3 11 19 23 51 453 777 789 2008 2014
    说明:
    不必考虑特大数,所给的数列中都是整数值。
    dishuo:
    复制代码 代码如下:

    cls@echo offsetlocal enabledelayedexpansion
    set "strings=3 2008 11 19 777 23 2014 453 789 51"
    echo %strings%
    set/a n=0
    for %%i in (%strings%) do (
    set/a n+=1
    set num[!n!]=%%i
    )
    call :quicksort num 1 %n%
    for /l %%i in (1,1,%n%) do echo !num[%%i]!
    pausegoto:eof
    :QuickSort
    ::code by dishuostec
    ::use call :quicksort arrary low high
    set "ARR=%1"
    set/a dep=0
    call :QS %2 %3
    goto:eof
    :QS
    set/a dep+=1,lTmpLow=%1,lTmpHi=%2,Low=%1,Hi=%2
    if %Hi% leq %Low% set/a dep-=1goto :eof
    set/a lTmpMid=(Low+Hi)/2
    call set/a vTempVal=%%%ARR%[!lTmpMid!]%%
    :qsMainLoop
    if !lTmpLow! leq !lTmpHi! (
    :qsLoop1
    call set/a vVal=%%%ARR%[!lTmpLow!]%%
    if !vVal! lss !vTempVal! if !lTmpLow! lss !Hi! set/a lTmpLow+=1 goto qsLoop1
    :qsLoop2
    call set/a vVal=%%%ARR%[!lTmpHi!]%%
    if !vTempVal! lss !vVal! if !Low! lss !lTmpHi! set/a lTmpHi-=1goto qsLoop2
    :qsSwap
    if !lTmpLow! leq !lTmpHi! (
    call set/a vTmpHold=%%%ARR%[!lTmpLow!]%%
    call set/a %ARR%[!lTmpLow!]=%%%ARR%[!lTmpHi!]%%
    set/a %ARR%[!lTmpHi!]=vTmpHold
    set/a lTmpLow+=1,lTmpHi-=1
    )
    goto qsMainLoop
    )
    set/a lTmpLow[%dep%]=lTmpLow,Hi[%dep%]=Hi
    if %Low% lss %lTmpHi% call :QS %Low% %lTmpHi%
    call set lTmpLow=%%lTmpLow[!dep!]%%call set Hi=%%Hi[!dep!]%%
    if %lTmpLow% lss %Hi% call :QS %lTmpLow% %Hi%
    set/a dep-=1goto :eof

     
     
    terse:
    复制代码 代码如下:

    @echo offsetlocal enabledelayedexpansion
    set str=3 2008 11 19 777 23 2014 453 789 51
    for %%i in (%str%) do (
    set str=0000000000%%i
    set .!str:~-10! !random!=%%i
    )
    for /f "tokens=2 delims==" %%i in ('set .') do set/p=%%i nul
    pause>nul

     
     
    MKL:
    复制代码 代码如下:

    @echo offsetlocal enabledelayedexpansion
    set "p=3 2008 11 19 777 23 2014 453 789 51"
    for %%i in (%p%) do (
    set t=1
    for %%r in (%p%) do (
    if %%i gtr %%r set /a t=!t!+1
    )
    set !t!=%%i
    )
    echo !1! !2! !3! !4! !5! !6! !7! !8! !9! !10!
    pause

     
    523066680:
    复制代码 代码如下:

    @echo off
    setlocal enabledelayedexpansion
    set hang=3 2008 11 19 777 23 2014 453 789 51 3 3 4 2014
    set n=0
    for %%a in (%hang%) do (
    set /a num=1,n+=1
    for %%b in (%hang%) do (
    if %%a gtr %%b set /a num+=1
    )
    call :next !num!
    set !num!=%%a
    )
    for /l %%a in (1,1,%n%) do echo !%%a!
    pause
    goto :eof
    :next
    if defined %num% (set /a num+=1 goto :next)
    上一篇:将字符串小写转大写并延时输出的批处理代码
    下一篇:批处理随机取值练习代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    出给新手的数值排序加分题 出,给,新手,的,数值,排序,