找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: pusofalse

【练习-014】出给新手的数值排序加分题

[复制链接]
发表于 2008-8-22 08:53:06 | 显示全部楼层
问题出来了,
虽然偏方的代码不长,但是如果排序的数字 有几个是相同滴咋办
发表于 2008-8-22 09:04:49 | 显示全部楼层
不知是否符合题意
  1. @echo off&setlocal enabledelayedexpansion
  2. set "p=3 2008 11 19 777 23 2014 453 789 51"
  3. for %%i in (%p%) do (
  4.    set t=1
  5.    for %%r in (%p%) do (
  6.        if %%i gtr %%r set /a t=!t!+1
  7.    )
  8. set !t!=%%i
  9. )
  10. echo !1! !2! !3! !4! !5! !6! !7! !8! !9! !10!
  11. pause
复制代码

评分

参与人数 3PB +32 收起 理由
pusofalse + 10
more + 12 厉害,佩服!!!
batman + 10 这种冒泡排序的思路绝了!

查看全部评分

发表于 2008-8-22 10:37:16 | 显示全部楼层

先来两种方法

一、冒泡法:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (3 2008 11 19 777 23 2014 453 789 51) do set "str=!str! #%%i#"
  3. set "var=%str%"
  4. for %%a in (%str%) do (
  5.     for %%i in (!var!) do (
  6.         set "a=%%a"&set "b=%%i"
  7.         set "a=!a:#=!"&set "b=!b:#=!"
  8.         if !a! gtr !b! (
  9.         set "var=!var:%%a =!"
  10.         set "var=!var:%%i=%%i %%a!"
  11.         )
  12.     )
  13. )
  14. echo %var:#=%&pause>nul
复制代码
二、补位法:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1,1,80) do set "bw=!bw!0"
  3. for %%i in (3 2008 11 19 777 23 2014 453 789 51) do (
  4.      set "str=%bw%%%i"
  5.      set "_!str:~-80!=%%i"
  6. )
  7. for /f "tokens=2 delims==" %%i in ('set _') do set /p=%%i <nul
  8. pause>nul
复制代码

[ 本帖最后由 batman 于 2008-8-22 14:18 编辑 ]

评分

参与人数 1PB +6 收起 理由
keen + 6 补位法最帅!!!

查看全部评分

发表于 2008-8-22 10:37:51 | 显示全部楼层
好了
根据版主所说改进了一下
还是用了临时文件 不改了 ~~ ~  通用性增强 最大到10位~~
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. echo 数组排列
  4. echo.
  5. echo 最大可支持10位 输入时以空格键隔开
  6. echo.
  7. set /p str=输入数组:
  8. echo.
  9. echo 原数组为%str%.
  10. set n=0
  11. for %%i in (%str%) do (
  12. set/a n+=1
  13. set str[!n!]=         %%i
  14. )
  15. for /l %%i in (1,1,%n%) do echo !str[%%i]:~-10!>>1.txt
  16. echo.
  17. echo.
  18. echo 现数组为:
  19. sort 1.txt
  20. set /p a=按回车键结束
  21. del 1.txt
复制代码
发表于 2008-8-22 10:45:58 | 显示全部楼层
原帖由 mkl 于 2008-8-22 09:04 发表
不知是否符合题意@echo off&setlocal 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. @echo off&setlocal enabledelayedexpansion
  2. set "p=3 2008 11 19 777 23 2014 453 789 51"
  3. for %%i in (%p%) do (
  4.    set /a n+=1,t=1
  5.    for %%r in (%p%) do (
  6.        if %%i gtr %%r set /a t+=1
  7.    )
  8.    set !t!=%%i
  9. )
  10. for /l %%i in (1,1,%n%) do set /p=!%%i! <nul
  11. pause>nul
复制代码

[ 本帖最后由 batman 于 2008-8-22 10:51 编辑 ]
发表于 2008-8-22 14:40:36 | 显示全部楼层
以上部分代码考虑了相同的数 有的没有考虑 。有相同的数 只显示了一次。
(嘿!!!!凭什么我写那个跟你想的¥!@#%@##~!#        就只加我2分啊)

[ 本帖最后由 523066680 于 2008-8-23 11:41 编辑 ]
 楼主| 发表于 2008-8-22 15:00:00 | 显示全部楼层
只需把9楼的代码稍作调整即可。
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for /l %%a in (1 1 10) do set "var=!var!!random! "
  4. echo %var%%
  5. for %%i in (%var%) do (
  6. set "str=   %%i"
  7. set "echo=!echo!echo !str:~-5!&"
  8. )
  9. (%echo:~,-1%)|sort
  10. pause>nul
复制代码

[ 本帖最后由 pusofalse 于 2008-8-22 15:03 编辑 ]
发表于 2008-8-23 11:35:47 | 显示全部楼层
居然没人理我也……17楼的思路是可以完善到 存在重复的数的,
(呜呜 我读书的时候想过这个思路的 估计false也不会考虑给我加分了)
以下是17楼思路的更新版本  允许存在相同的数

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set hang=3 2008 11 19 777 23 2014 453 789 51 3 3 4 2014
  4. set n=0
  5. for %%a in (%hang%) do (
  6.   set /a num=1,n+=1
  7.   for %%b in (%hang%) do (
  8.     if %%a gtr %%b set /a num+=1
  9.   )
  10. call :next !num!
  11. set !num!=%%a
  12. )
  13. for /l %%a in (1,1,%n%) do echo !%%a!
  14. pause
  15. goto :eof
  16. :next
  17. if defined %num% (set /a num+=1 &goto :next)
复制代码

[ 本帖最后由 523066680 于 2008-8-23 11:37 编辑 ]

评分

参与人数 2PB +15 收起 理由
keen + 7 好,考虑了重复的数!
pusofalse + 8

查看全部评分

发表于 2008-8-23 12:10:13 | 显示全部楼层
原帖由 523066680 于 2008-8-22 14:40 发表
以上部分代码考虑了相同的数 有的没有考虑 。有相同的数 只显示了一次。
(嘿!!!!凭什么我写那个跟你想的¥!@#%@##~!#        就只加我2分啊)

这倒是的~~呵呵~~~
发表于 2008-8-23 20:50:50 | 显示全部楼层
有些地方正好对我工作有点用处。

[ 本帖最后由 itrui 于 2008-8-23 21:03 编辑 ]
发表于 2008-8-26 14:34:56 | 显示全部楼层
哈哈
看到这篇贴子
我知道了有一个叫冒泡排序的东西
另外Batcher兄在另外一个贴子里面给了一个学习冒泡排序的连接
让我好好的学习了一把
我现在把它帮到这里来
希望不懂什么叫冒泡排序的朋友也去学习下
http://www.google.cn/search?hl=z ... %E5%BA%8F&meta=
发表于 2008-8-26 18:38:18 | 显示全部楼层
居然才是新手的题目,哎,看来。。。
发表于 2012-8-19 21:50:10 | 显示全部楼层
回复 7# terse


    那个set .是什么意思?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:09 , Processed in 0.018537 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表