Sorting algorithms/Bubble sort: Difference between revisions

m
Line 539:
@echo off & setlocal enabledelayedexpansion
 
:: Bubble Sort for batch/cmd: Michael Sanders - 2017
::
:: usage: bsort cb321a
:: output: 123abc
::
:: default isto sort ascending [a-z]: set seq=gtr
:: to sort descending [z-a]...: set seq=lss
::
:: change: if defined b if !a! gtr !b!
:: to: if defined b if !a! lss !b!
::
:: collating order...
::
:: 32 SPC 37 % 51 3 42 *70 F 47 /89 Y 52108 4l
:: 33 ! 38 & 52 4 43 +71 G 48 090 Z 53109 5m
:: 34 " 39 ' 53 5 44 ,72 H 49 191 [ 54110 6n
:: 35 # 40 ( 54 6 45 -73 I 50 292 \ 55111 7o
:: 36 $ 41 ) 55 7 46 .74 J 51 393 ] 56112 8p
:: 37 % 56 8 75 K 94 ^ 113 q
::
:: 38 57& 9 57 62 > 9 67 C76 L 72 H95 _ 77114 Mr
:: 39 58' : 58 63 ? : 68 D77 M 73 I96 ` 78115 Ns
:: 40 59( ; 59 64 @ ; 69 E78 N 74 J97 a 79116 Ot
:: 41 60) < 60 65 A < 70 F79 O 75 K98 b 80117 Pu
:: 42 61* = 61 66 B = 71 G80 P 76 L99 c 81118 Qv
:: 43 + 62 > 81 Q 100 d 119 w
::
:: 44 82, R 63 87? W 82 92 \ R 97101 ae 102120 fx
:: 45 83- S 64 88@ X 83 93 ] S 98102 bf 103121 gy
:: 46 84. T 65 89A Y 84 94 ^ T 99103 cg 104122 hz
:: 47 85/ U 66 90B Z 85 95 _U 100104 dh 105123 i{
:: 48 860 V 67 91C [ 86 96 `V 101105 ei 106124 j|
:: 11049 n1 115 s68 D 120 x87 W 106 j 125 }
::
:: 10750 k2 112 p69 E 117 u88 X 122 z107 k 127126 DEL~
:: 108 l 113 q 118 v 123 {
:: 109 m 114 r 119 w 124 |
:: 110 n 115 s 120 x 125 }
:: 111 o 116 t 121 y 126 ~
 
:setup
 
set unsortedseq=%*gtr
set bufstr=%unsorted%*
set cbuf=1%*
set len=0
 
:getlength
 
if not defined buf goto :splitchklength
set buf=%buf:~1%
set /a len+=1
goto :getlength
 
:chklength
:split
 
if %len% leq 0 (echo bubble sort: zero length string & exit /b 1)
set /a len-=1
for /l %%x in (0,1,%len%) do set u[%%x]=!unsorted:~%%x,1!
 
:bubblesort
 
set /a c=0
for /l %%x in (0,1,%len%) do (
set /a py=%%x+1
call set a=!u[str:~%%x],1!
call set b=%%u[str:~!py!],1%%
if defined b if !a! gtr%seq% !b! (
call set u[str=%%str:!pa!!b!]=!b!!a!%%
set u[%%x]/a c=!b!1
set c=1
)
)
if !%c!==% equ 1 goto :bubblesort
 
:done
 
echo unsorted input: %*
for /l %%x in (0,1,%len%) do set sorted=!sorted!!u[%%x]!
echo. &sorted echooutput: unsorted input: !unsorted!%str%
echo. & echo sorted output: !sorted!
endlocal & exit /b 0
 
:eof
</lang>
 
Anonymous user