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

【练习-036】批处理将数值按要求排序

出题目的:
  1、通过练习掌握数值排序的几种方法
  2、通过练习掌握切分字符串的方法
加分原则:
  满分15分,视情形加分(以思路为重)
解题限制:
  版主级的暂请观看,但可做解题提示
题目如下:
  有a.txt(见一)内容为N列N行不等的4位内数值,通过批处理将所有数值从小到大进行排序,并按6个数值一行输出到b.txt(见二)。

  1. 4981 5487 2724 2419 4837 2218 37 19 2880 5521
  2. 9613 7292 7433 554 8287 1147 9516 5678 9760 3028
  3. 9220 5936 3580 6455 8116 9776 6246 1652 6390 6615
  4. 7855 7707 1850 4564 2454 4571 7330 8718 4499 5083
  5. 7683 3076 637 3644 9714 6080 9554 8250 5353 6692
  6. 4036 9590 4539 8156 7648 6738 8834 7033 4043 9729
  7. 7512 1299 1611 1054 9291 9948 7213 5882 6891 6149
  8. 1159 7604 1290 7426 8342 4907 7802 2285 6828 4547
  9. 940 4594 5470 3831 7949 3308 8553 5841 4532 6151
  10. 2048 4362 7137 6227 1843 2833 119 6124 6716 4435
  11. 6342 132 4637 4359 7482 632 8 35 9999 1023
复制代码


  1. 8 19 35 37 119 132
  2. 554 632 637 940 1023 1054
  3. 1147 1159 1290 1299 1611 1652
  4. 1843 1850 2048 2218 2285 2419
  5. 2454 2724 2833 2880 3028 3076
  6. 3308 3580 3644 3831 4036 4043
  7. 4359 4362 4435 4499 4532 4539
  8. 4547 4564 4571 4594 4637 4837
  9. 4907 4981 5083 5353 5470 5487
  10. 5521 5678 5841 5882 5936 6080
  11. 6124 6149 6151 6227 6246 6342
  12. 6390 6455 6615 6692 6716 6738
  13. 6828 6891 7033 7137 7213 7292
  14. 7330 7426 7433 7482 7512 7604
  15. 7648 7683 7707 7802 7855 7949
  16. 8116 8156 8250 8287 8342 8553
  17. 8718 8834 9220 9291 9516 9554
  18. 9590 9613 9714 9729 9760 9776
  19. 9948 9999
复制代码

[ 本帖最后由 batman 于 2009-2-25 20:31 编辑 ]
***共同提高***

请注意a.txt是n列n行,就是不知道有几行几列,所以楼上的tokens=1-10不可取,同时这种代码的效率是很相当低的。
***共同提高***

TOP

原帖由 BBCC 于 2009-2-25 21:37 发表
嗯..数据.数量很大的时候用什么方法好呢?二分法应该是比较快的了,但是不知道速度能不能跟上...

兄弟把你的方法写出来看看吧
***共同提高***

TOP

我想知道三个答案:
一、是不是我每次出的题都难了点,让大家习惯性的望而生畏了?
二、是不是大家都不想通过解题这种快捷方式来得到提高了?
三、难道论坛除了版主、技术组、新手(新手在做新手题)就没有其他的会员了?
***共同提高***

TOP

我不赞同jm的意见,首先我声明了原始数据中数值是不等的(这在题目中可以看到),其次
采用for /l (1,1,n)+findstr的方法效率不是最高的,举个例子假如原始数据中只有
1,1000,1000000000这三个数据,那岂不是for要空循环1000000000-3次,我觉得设置变量
法是最快的,以上面的例子只要设置三个变量就行了,至于具体怎么处理,大家思考了。
1

评分人数

    • youxi01: 有道理,我向来不看好"findstr" ...PB + 2
***共同提高***

TOP

&&没想到这个贴子引发了众位管理员对处理数据的一番激烈议论,各位也给出了精彩的代
码,看得我目不暇接眼花缭乱,确实是学习了。
  对于数据的处理,本人还是偏爱于设置变量法,jm说这种方法会消耗系统内存,确实是
如此,经本人亲自实验,按现在的一般机器配置,设置1000000个变量(仅实验到百万)对
系统的运行不会造成明显的影响。因此,设置变量法还是合适处理海量的数据的。
  下面给出本人的解:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.     for %%b in (%%a) do set "a=####%%b"&set "_!a:~-4!=a"
  4. )
  5. for /f "tokens=1 delims=#_=" %%a in ('set _') do (
  6.      set /a n+=1,m=n%%6
  7.      set /p=%%a        <nul>>b.txt
  8.      if !m! equ 0 echo.>>b.txt
  9. )
  10. start b.txt
复制代码
  
***共同提高***

TOP

返回列表