不知楼主是原创还是转帖。如果是原创,当加分鼓励;如果是转帖,望注明出处。
直接插入排序
http://www.cn-dos.net/forum/viewthread.php?tid=33569 | @echo off | | setlocal enabledelayedexpansion | | | | :::::::::::::::::::::::::::::::::::::::::Straight Insertion Sort::::::::::::::::::::::::::::::::::::::::: | | | | | | ::::::::Get Original Numbers:::::::: | | echo Please input some numbers separated from "," , like 2007,9,14,88: | | set /a s=0 | | set /p str= | | set /a len=0 | | set /a nx=0 | | :c | | call set word=%%str:~%len%,1%% | | set /a len+=1 | | if "%word%" equ "," (set /a nx+=1 & call :e) | | if not "%word%" equ "" (goto :c) | | set /a nx+=1 | | call :e | | goto :o | | :e | | set /a sn=%len%-%s%-1 | | call set n%nx%=%%str:~%s%,%sn%%% | | set /a s=%len% | | goto :eof | | ::::::::Get Original Numbers:::::::: | | | | ::::::::Deal With Numbers:::::::: | | :o | | set /a num=%nx%+1 | | set /a i=2 | | :m | | set /a temporary=!n%i%! | | set /a j=%i%-1 | | :j | | if %temporary% lss !n%j%! (goto :ch) | | goto :z | | :ch | | set /a k=%j%+1 | | set /a n%k%=!n%j%! | | set /a j-=1 | | if %j% gtr 0 goto :j | | :z | | set /a k=%j%+1 | | set /a n%k%=%temporary% | | set /a i+=1 | | if %i% lss %num% goto :m | | ::::::::Deal With Numbers:::::::: | | | | ::::::::Print The Result:::::::: | | for /l %%a in (1,1,%nx%) do (set str2=!str2!!n%%a! ) | | echo. | | echo The numbers after sorting are: | | echo !str2! | | echo. | | echo Press Any Key To Exit... | | pause>nul | | goto :eof | | ::::::::Print The Result:::::::: | | | | | | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::s11ss | | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2007-9-14COPY |
希尔排序
http://www.cn-dos.net/forum/viewthread.php?tid=33578 | @echo off | | setlocal enabledelayedexpansion | | :::::::::::::::::::::::::::::::::::::::::Shell Sort::::::::::::::::::::::::::::::::::::::::: | | | | | | ::::::::Get Original Numbers:::::::: | | echo Please input some numbers separated from "," , like 2007,9,14,88: | | set /a s=0 | | set /p str= | | set /a len=0 | | set /a nx=0 | | :c | | call set word=%%str:~%len%,1%% | | set /a len+=1 | | if "%word%" equ "," (set /a nx+=1 & call :e) | | if not "%word%" equ "" (goto :c) | | set /a nx+=1 | | call :e | | goto :o | | :e | | set /a sn=%len%-%s%-1 | | call set n%nx%=%%str:~%s%,%sn%%% | | set /a s=%len% | | goto :eof | | ::::::::Get Original Numbers:::::::: | | | | ::::::::Deal With Numbers:::::::: | | :o | | set /a maxinc=(%nx%-1)/2 | | set /a num=%nx%+1+%maxinc% | | for /l %%a in (%nx%,-1,1) do (set /a kk=%maxinc%+%%a & set /a n!kk!=!n%%a!) | | for /l %%b in (1,1,%maxinc%) do ( | | (set /a n%%b=-214748320) | | ) | | set /a var=1 | | :n | | if %var% equ 1 (set /a m%var%=%maxinc%) else (set /a var2=%var%-1 & call :x) | | set /a i=!m%var%!+%maxinc%+1 | | if !m%var%! equ 0 (goto :p) else (goto :m) | | :x | | set /a m%var%=!m%var2%!/2 | | goto :eof | | :m | | set /a temporary=!n%i%! | | set /a j=%i%-!m%var%! | | :j | | if %temporary% lss !n%j%! (goto :ch) | | goto :z | | :ch | | set /a k=%j%+!m%var%! | | set /a n%k%=!n%j%! | | set /a j-=!m%var%! | | goto :j | | :z | | set /a k=%j%+!m%var%! | | set /a n%k%=%temporary% | | set /a i+=1 | | if %i% lss %num% (goto :m) else (set /a var+=1 & goto :n) | | ::::::::Deal With Numbers:::::::: | | | | ::::::::Print The Result:::::::: | | :p | | set /a qi=%maxinc%+1 | | set /a zhi=%nx%+%maxinc% | | for /l %%c in (%qi%,1,%zhi%) do (set str2=!str2!!n%%c! ) | | echo. | | echo The numbers after sorting are: | | echo !str2! | | echo. | | echo Press Any Key To Exit... | | pause>nul | | goto :eof | | ::::::::Print The Result:::::::: | | | | | | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::s11ss | | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2007-9-15COPY |
快速排序
http://www.cn-dos.net/forum/viewthread.php?tid=33602 | @echo off | | setlocal enabledelayedexpansion | | | | :::::::::::::::::::::::::::::::::::::::::Quick Sort::::::::::::::::::::::::::::::::::::::::: | | | | | | ::::::::Get Original Numbers:::::::: | | echo Please input some numbers separated from "," , like 2007,9,14,88: | | set /a s=0 | | set /p str= | | set /a len=0 | | set /a nx=0 | | :c | | call set word=%%str:~%len%,1%% | | set /a len+=1 | | if "%word%" equ "," (set /a nx+=1 & call :e) | | if not "%word%" equ "" (goto :c) | | set /a nx+=1 | | call :e | | goto :o | | :e | | set /a sn=%len%-%s%-1 | | call set n%nx%=%%str:~%s%,%sn%%% | | set /a s=%len% | | goto :eof | | ::::::::Get Original Numbers:::::::: | | | | ::::::::Deal With Numbers:::::::: | | :o | | call :oo 1 %nx% | | goto :p | | :oo | | set /a aa=%1 | | set /a bb=%2 | | if %aa% lss %bb% ( | | call :partition %aa% %bb% | | set /a jj=!i!-1 | | call :oo %aa% !jj! | | set /a ii=!i!+1 | | call :oo !ii! %bb% | | ) | | goto :eof | | :partition | | set /a i=%1 | | set /a j=%2 | | set /a temporary=!n%i%! | | :cir | | :cr2l | | if %temporary% leq !n%j%! ( | | if %i% lss %j% (set /a j-=1 && goto :cr2l) | | ) | | if %i% lss %j% (set /a n%i%=!n%j%! & set /a i+=1) | | :cl2r | | if %temporary% geq !n%i%! ( | | if %i% lss %j% (set /a i+=1 && goto :cl2r) | | ) | | if %i% lss %j% (set /a n%j%=!n%i%! & set /a j-=1) | | if not %i% equ %j% goto :cir | | set /a n%i%=%temporary% | | goto :eof | | ::::::::Deal With Numbers:::::::: | | | | ::::::::Print The Result:::::::: | | :p | | for /l %%c in (1,1,%nx%) do (set str2=!str2!!n%%c! ) | | echo. | | echo The numbers after sorting are: | | echo !str2! | | echo. | | echo Press Any Key To Exit... | | pause>nul | | goto :eof | | ::::::::Print The Result:::::::: | | | | | | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::s11ss | | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2007-9-16COPY |
直接选择排序
http://www.cn-dos.net/forum/viewthread.php?tid=33609 | @echo off | | setlocal enabledelayedexpansion | | | | :::::::::::::::::::::::::::::::::::::::::Straight Selection Sort::::::::::::::::::::::::::::::::::::::::: | | | | | | ::::::::Get Original Numbers:::::::: | | echo Please input some numbers separated from "," , like 2007,9,14,88: | | set /a s=0 | | set /p str= | | set /a len=0 | | set /a nx=0 | | :c | | call set word=%%str:~%len%,1%% | | set /a len+=1 | | if "%word%" equ "," (set /a nx+=1 & call :e) | | if not "%word%" equ "" (goto :c) | | set /a nx+=1 | | call :e | | goto :o | | :e | | set /a sn=%len%-%s%-1 | | call set n%nx%=%%str:~%s%,%sn%%% | | set /a s=%len% | | goto :eof | | ::::::::Get Original Numbers:::::::: | | | | ::::::::Deal With Numbers:::::::: | | :o | | set /a i=1 | | :ooo | | set /a k=%i% | | set /a j=%i%+1 | | :oo | | if !n%j%! lss !n%k%! set /a k=%j% | | set /a j+=1 | | if %j% leq %nx% goto :oo | | if %k% neq %i% ( | | set /a temporary=!n%i%! | | set /a n%i%=!n%k%! | | set /a n%k%=!temporary! | | ) | | set /a i+=1 | | if %i% lss %nx% goto :ooo | | ::::::::Deal With Numbers:::::::: | | | | ::::::::Print The Result:::::::: | | :p | | for /l %%c in (1,1,%nx%) do (set str2=!str2!!n%%c! ) | | echo. | | echo The numbers after sorting are: | | echo !str2! | | echo. | | echo Press Any Key To Exit... | | pause>nul | | goto :eof | | ::::::::Print The Result:::::::: | | | | | | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::s11ss | | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2007-9-16COPY |
堆排序
http://www.cn-dos.net/forum/viewthread.php?tid=33623 | @echo off | | setlocal enabledelayedexpansion | | | | :::::::::::::::::::::::::::::::::::::::::Heap Sort::::::::::::::::::::::::::::::::::::::::: | | | | | | ::::::::Get Original Numbers:::::::: | | echo Please input some numbers separated from "," , like 2007,9,14,88: | | set /a s=0 | | set /p str= | | set /a len=0 | | set /a nx=0 | | :c | | call set word=%%str:~%len%,1%% | | set /a len+=1 | | if "%word%" equ "," (set /a nx+=1 & call :e) | | if not "%word%" equ "" (goto :c) | | set /a nx+=1 | | call :e | | goto :o | | :e | | set /a sn=%len%-%s%-1 | | call set n%nx%=%%str:~%s%,%sn%%% | | set /a s=%len% | | goto :eof | | ::::::::Get Original Numbers:::::::: | | | | ::::::::Deal With Numbers:::::::: | | :o | | set /a iv=%nx%/2 | | :v | | call :sift %iv% %nx% | | set /a iv-=1 | | if %iv% geq 1 goto :v | | set /a iv=%nx% | | :b | | set /a tmpr=!n1! | | set /a n1=!n%iv%! | | set /a n%iv%=%tmpr% | | set /a iii=%iv%-1 | | call :sift 1 %iii% | | set /a iv-=1 | | if %iv% geq 2 goto :b | | goto :p | | :sift | | set /a i=%1 | | set /a ww=%2 | | :oo | | set /a t=!n%i%! | | set /a j=2*%i% | | :ooo | | if not %j% leq %ww% goto :eof | | if %j% lss %ww% ( | | set /a k=%j%+1 | | if !n%j%! lss !n%k%! (set /a j+=1) | | ) | | if !t! lss !n%j%! ( | | set /a n%i%=!n%j%! | | set /a i=%j% | | set /a j=2*!i! | | ) else (goto :oooo) | | set /a n%i%=%t% | | if %j% leq %ww% goto :ooo | | goto :eof | | :oooo | | set /a n!i!=%t% | | goto :eof | | ::::::::Deal With Numbers:::::::: | | | | ::::::::Print The Result:::::::: | | :p | | for /l %%c in (1,1,%nx%) do (set str2=!str2!!n%%c! ) | | echo. | | echo The numbers after sorting are: | | echo !str2! | | echo. | | echo Press Any Key To Exit... | | pause>nul | | goto :eof | | ::::::::Print The Result:::::::: | | | | | | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::s11ss | | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2007-9-16COPY |
起泡排序
http://www.cn-dos.net/forum/viewthread.php?tid=33595 | @echo off | | setlocal enabledelayedexpansion | | | | :::::::::::::::::::::::::::::::::::::::::Bubble Sort::::::::::::::::::::::::::::::::::::::::: | | | | | | ::::::::Get Original Numbers:::::::: | | echo Please input some numbers separated from "," , like 2007,9,14,88: | | set /a s=0 | | set /p str= | | set /a len=0 | | set /a nx=0 | | :c | | call set word=%%str:~%len%,1%% | | set /a len+=1 | | if "%word%" equ "," (set /a nx+=1 & call :e) | | if not "%word%" equ "" (goto :c) | | set /a nx+=1 | | call :e | | goto :o | | :e | | set /a sn=%len%-%s%-1 | | call set n%nx%=%%str:~%s%,%sn%%% | | set /a s=%len% | | goto :eof | | ::::::::Get Original Numbers:::::::: | | | | ::::::::Deal With Numbers:::::::: | | :o | | set /a i=1 | | :q | | set changed=False | | set /a j=%nx% | | :v | | set /a k=%j%-1 | | if !n%k%! gtr !n%j%! ( | | set /a temporary=!n%k%! | | set /a n%k%=!n%j%! | | set /a n%j%=!temporary! | | set changed=True | | ) | | set /a j-=1 | | if %j% geq %i% ( | | if not %j% equ 1 ( | | goto :v | | ) | | ) | | if %changed% equ False goto :p | | set /a i+=1 | | if %i% lss %nx% goto :q | | ::::::::Deal With Numbers:::::::: | | | | ::::::::Print The Result:::::::: | | :p | | ::set /a qi=%maxinc%+1 | | ::set /a zhi=%nx%+%maxinc% | | for /l %%c in (1,1,%nx%) do (set str2=!str2!!n%%c! ) | | echo. | | echo The numbers after sorting are: | | echo !str2! | | echo. | | echo Press Any Key To Exit... | | pause>nul | | goto :eof | | ::::::::Print The Result:::::::: | | | | | | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::s11ss | | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2007-9-15COPY |
VBS版各种排序
http://www.cn-dos.net/forum/viewthread.php?tid=34530 | | | | | | | option explicit | | | | dim s,r,n,i | | s=inputbox(vbcrlf&vbcrlf&"以空格隔开:","请输入一组数:","2007 10 18 21 15") | | if s="" then wscript.quit | | r=split(s," ") | | n=ubound(r) | | | | for i=0 to n | | r(i)=cdbl(r(i)) | | next | | | | | | quicksort r,0,n | | | | | | | | | | | | | | | | | | inputbox vbcrlf&vbcrlf&"按升序排列是:","结果",join(r," ") | | | | | | | | | | | | | | | | | | | | | | sub insertsort(r) | | dim i,n,t,j | | n=ubound(r) | | for i=1 to n | | t=r(i) | | j=i-1 | | do while t<r(j) | | r(j+1)=r(j) | | j=j-1 | | if j=-1 then exit do | | loop | | r(j+1)=t | | next | | end sub | | | | | | sub shellsort(r) | | | | dim i,d(),n,t,k,h,j | | n=ubound(r) | | i=0 | | redim d(n) | | d(i)=fix(n/2) | | do until d(i)=1 | | t=d(i) | | i=i+1 | | d(i)=fix(t/2) | | loop | | | | k=0 | | do | | h=d(k) | | for i=h to n | | t=r(i) | | j=i-h | | do while t<r(j) | | r(j+h)=r(j) | | j=j-h | | if j<0 then exit do | | loop | | r(j+h)=t | | next | | k=k+1 | | loop while h<>1 | | end sub | | | | | | sub bubblesort(r) | | dim i,n,noswap,j,t | | n=ubound(r) | | for i=0 to n-1 | | noswap=True | | for j=n-1 to i step -1 | | if r(j+1)<r(j) then | | t=r(j) | | r(j)=r(j+1) | | r(j+1)=t | | noswap=False | | end if | | next | | if noswap then exit for | | next | | end sub | | | | | | | | function partition(r,l,h) | | dim i,j,t | | i=l | | j=h | | t=r(i) | | do | | while r(j)>=t and i<j | | j=j-1 | | wend | | if i<j then | | r(i)=r(j) | | i=i+1 | | end if | | while r(i)<=t and i<j | | i=i+1 | | wend | | if i<j then | | r(j)=r(i) | | j=j-1 | | end if | | loop while i<>j | | r(i)=t | | partition=i | | end function | | | | sub quicksort(r,s1,t1) | | dim i | | if s1<t1 then | | i=partition(r,s1,t1) | | quicksort r,s1,i-1 | | quicksort r,i+1,t1 | | end if | | end sub | | | | | | sub selectsort(r) | | dim i,n,k,j,t | | n=ubound(r) | | for i=0 to n-1 | | k=i | | for j=i+1 to n | | if r(j)<r(k) then k=j | | next | | if k<>i then | | t=r(i) | | r(i)=r(k) | | r(k)=t | | end if | | next | | end sub | | | | | | | | sub sift(r,i,m) | | dim t,j | | t=r(i) | | j=2*i | | do while j<=m | | if j<m then | | if r(j)<r(j+1) then j=j+1 | | end if | | if t<r(j) then | | r(i)=r(j) | | i=j | | j=2*i | | else | | exit do | | end if | | loop | | r(i)=t | | end sub | | | | sub heapsort(r) | | dim i,n,t | | n=ubound(r) | | for i=fix(n/2) to 0 step -1 | | sift r,i,n | | next | | for i=n to 0 step -1 | | t=r(0) | | r(0)=r(i) | | r(i)=t | | sift r,0,i-1 | | next | | end subCOPY |
|