补一个优化版- @echo off
- Setlocal enabledelayedexpansion
- ::CODER BY 老刘 POWERD BY iBAT
- Set /p List=
- Call :GetList !List!
- Set /A Count=1
- :Loop
- Rem 首项逆向比较
- Set /A Flag1=0
- For /l %%a in (!prt! -1 1) Do (
- If !.1! Gtr !.%%a! (
- Call :MoveTo %%a
- set/p=移动到%%a后:<nul
- For /l %%a in (1 1 !prt!) Do Set/p=!.%%a!-<nul
- Echo.
- Set /A Flag1=1
- Goto :JmpOut
- )
- )
- :JmpOut
- If !Flag1! Equ 1 Goto Loop
-
- Rem 判断是否排序完成。
- Set /A Flag2=0
- For /l %%a in (1 1 !prt!) Do (
- Set /A PlusOne=%%a+1
- Set /A "#=.!PlusOne!"
- If !#! Lss !.%%a! (
- Set Flag2=1
- If %%a equ !prt! Set Flag2=0
- Goto :JmpOut2
- )
- )
- :JmpOut2
- If !Flag2! Equ 0 Goto End
-
- Rem 继续排序
- Set /A Count+=1
- If !Count! Leq !prt! (
- Call :MoveTo !Count!
- Set/p=移动到!Count!后:<nul
- For /l %%a in (1 1 !prt!) Do Set/p=!.%%a!-<nul
- Echo.
- Goto :Loop
- )
- :End
- For /l %%a in (1 1 !prt!) Do Set/p=!.%%a!-<nul
- Echo.&pause&"%~0"
-
- :GetList
- Set /A Prt=0
- Set list=%*
- For %%a In (%*) Do (
- Set /A Prt+=1
- Set .!Prt!=%%a
- )
- Goto :Eof
-
- :MoveTo 移动到原先第%1项的后面
- Set /A #=.1
- For /l %%a in (1 1 %1) Do (
- Set /A PlusOne=%%a+1
- Set /A .%%a=.!PlusOne!
- )
- Set /A .%1=#
- Goto :Eof
复制代码
- 5 1 3 2 4
- 移动到5后:1-3-2-4-5-
- 移动到2后:3-1-2-4-5-
- 移动到3后:1-2-3-4-5-
- 1-2-3-4-5-
- 请按任意键继续. . .
- 3 2 1
- 移动到3后:2-1-3-
- 移动到2后:1-2-3-
- 1-2-3-
- 请按任意键继续. . .
- 7 3 4 1 10 9 8 11 24
- 移动到4后:3-4-1-7-10-9-8-11-24-
- 移动到3后:4-1-3-7-10-9-8-11-24-
- 移动到3后:1-3-4-7-10-9-8-11-24-
- 移动到2后:3-1-4-7-10-9-8-11-24-
- 移动到2后:1-3-4-7-10-9-8-11-24-
- 移动到3后:3-4-1-7-10-9-8-11-24-
- 移动到3后:4-1-3-7-10-9-8-11-24-
- 移动到3后:1-3-4-7-10-9-8-11-24-
- 移动到4后:3-4-7-1-10-9-8-11-24-
- 移动到4后:4-7-1-3-10-9-8-11-24-
- 移动到4后:7-1-3-4-10-9-8-11-24-
- 移动到4后:1-3-4-7-10-9-8-11-24-
- 移动到5后:3-4-7-10-1-9-8-11-24-
- 移动到5后:4-7-10-1-3-9-8-11-24-
- 移动到5后:7-10-1-3-4-9-8-11-24-
- 移动到5后:10-1-3-4-7-9-8-11-24-
- 移动到7后:1-3-4-7-9-8-10-11-24-
- 移动到6后:3-4-7-9-8-1-10-11-24-
- 移动到6后:4-7-9-8-1-3-10-11-24-
- 移动到6后:7-9-8-1-3-4-10-11-24-
- 移动到6后:9-8-1-3-4-7-10-11-24-
- 移动到6后:8-1-3-4-7-9-10-11-24-
- 移动到5后:1-3-4-7-8-9-10-11-24-
- 1-3-4-7-8-9-10-11-24-
- 请按任意键继续. . .
- 1 2 3 5 4
- 移动到2后:2-1-3-5-4-
- 移动到2后:1-2-3-5-4-
- 移动到3后:2-3-1-5-4-
- 移动到3后:3-1-2-5-4-
- 移动到3后:1-2-3-5-4-
- 移动到4后:2-3-5-1-4-
- 移动到4后:3-5-1-2-4-
- 移动到4后:5-1-2-3-4-
- 移动到5后:1-2-3-4-5-
- 1-2-3-4-5-
- 请按任意键继续. . .
复制代码
|