CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

◆数组排序

楼主cwm545(罪人)2006-03-18 13:36:48 在 Web 开发 / ASP 提问

现在一个数组有以下数据:  
  001;002;aaa;bbb;001;.....  
  现在需要把它变为(即去掉重反复的并按顺序排列出来)  
  001;002;aaa;bbb;...  
  请问在ASP下程序如何写?  
  谢谢,在线等待。。 问题点数:30、回复次数:9Top

1 楼pli0825(念叨念叨,我念叨死你!)回复于 2006-03-18 13:46:38 得分 4

意思没表达清楚,给的例子也没看明白。  
   
  楼主再说清楚点。  
  这其实也就是个算法的问题Top

2 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2006-03-18 13:49:11 得分 20

【如何最高效的排除字符串中重复值】  
  A   :  
                   
                   
                   
  字符串为:      
   
       
   
  皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹      
   
       
   
  现在要得到排除了其中的重复值之后的新字符串,     有很多方法可以做到这一点,     比如从第一位开始分析字符串,     或者使用     Scripting.Dictionary     对象逐个添加进去再判断排除,     或者使用数组,     或者...      
   
       
   
  因为这样的字符串非常多,     有几千条。如果使用复杂的对象比如     Scripting.Dictionary,     可以想象,速度一定像蜗牛一样。     我的想法是使用正则表达式来解决这个问题,     可是如何解决还没有想好。      
   
  大家帮忙想想,有什么好的办法都可以写出来,     最后按照最接近完美答案的程度来给分。      
   
       
   
  假设,     字符串中的分隔符是统一的,     比如都是逗号。      
   
  ---------------------------------------------------------------      
   
       
   
  靠     ,居然不理我      
   
  ---------------------------------------------------------------      
   
       
   
  关注一下!      
   
  ---------------------------------------------------------------      
   
       
   
  关注一下!      
   
  关注一下!      
   
  跟了      
   
  ---------------------------------------------------------------      
   
       
   
  我只会用数组,哈,写出来只是好玩哦      
   
       
   
  dim     txt,txt_s,txt_ok      
   
       
   
  txt     =     "皮疹,晕厥,皮疹,肤泻,皮疹"      
   
  txt_s     =     split(txt,",")      
   
  for     i     =     0     to     ubound(txt_s)      
   
                      if     instr(txt_ok,(txt_s(i)     &     ","))=0     then      
   
                                              txt_ok     =     txt_ok     &     txt_s(i)     &     ","      
   
                      end     if      
   
  next      
   
       
   
  txt_ok     =     left(txt_ok,(len(txt_ok)-1))      
   
  ---------------------------------------------------------------      
   
  Top

3 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2006-03-18 13:50:13 得分 0

 
   
  呵呵,      
   
  问一下:我不是很清楚,测试的时候不能通过。      
   
       
   
  正则对中文有效么???      
   
       
   
  ---------------------------------------------------------------      
   
       
   
  这是个算法问题……串的匹配算法,KMP??      
   
  ---------------------------------------------------------------      
   
       
   
       
   
  <script>      
   
  function     s1(a,b){return     a-b}      
   
  var     str     =     "1,2,3,2,6,5,4,7,2";      
   
  str     =     (","+     str).replace(/(.\d+)(.*)(\1)/g,     "$2");      
   
  str     =     str.substr(1).split(",").sort(s1).join(",");      
   
  alert(str);      
   
  </script>      
   
  试着改改吧。      
   
  ---------------------------------------------------------------      
   
       
   
  '凑个热闹      
   
       
   
  <%      
   
  str="皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹"      
   
  call     test(str)      
   
  %>      
   
  <%      
   
  sub     test(str)      
   
                          arr=split(str,",")      
   
                          l=lbound(split(str,","))      
   
                          u=ubound(split(str,","))      
   
                          for     i=l     to     u      
   
                                                  flag=0      
   
                                                  for     j=l     to     i-1      
   
                                                                          if     arr(i)=arr(j)     then     flag=1                         '重复      
   
                                                  next      
   
                                                                          if     flag=0     then      
   
                                                                                                  response.Write     arr(i)     &","      
   
                                                                          end     if                                                      
   
                          next      
   
  end     sub      
   
  %>      
   
  ---------------------------------------------------------------      
   
       
   
  用instr最快      
   
  a="皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹"      
   
  b=split(a,",")      
   
  d=""      
   
  for     i=0     to     ubound(b)      
   
              if     instr(d,b(i))=0     then      
   
                          d=d     &     ","     &     d(i)      
   
              end     if                      
   
  next      
   
  d=right(d,len(d)-1)         '去掉","      
   
  ---------------------------------------------------------------      
   
       
   
  大笨狼的:      
   
  <script     language=vbs>      
   
                          '以下是测试部分      
   
                          dim     vbsBegin     :     vbsBegin     =     Timer()      
   
                          dim     a          
   
                          a="皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹"      
   
       
   
                          '创建对象          
   
                               
   
                          dim     vbstest     :     vbstest     =     1000      
   
                          dim     result     :     result     =     ""      
   
                          for     j     =0     to     vbstest      
   
                                                  result     =     F(a)          
   
                          next      
   
                          dim     vbsEnd     :     vbsEnd     =     Timer()      
   
                          document.write     "做完这件事需要"     &     (vbsEnd     -     vbsBegin)     *     1000         &     "豪秒<br/>"      
   
                          document.write     result      
   
                               
   
                          function     F(x)          
   
                                                  dim     A,S,tag,aaa      
   
                                                  S     =     ""      
   
                                                  A     =     split(x,",")                                                                              
   
                                                  for     each     aaa     in     A                                                                                  
   
                                                                          if     instr(S,"     "     &     aaa     &     "     ")<1     then     S=         S     &     "     "         &     aaa         &     "     "      
   
                                                  next                                                                                  
   
                                                  F     =     trim(replace(S,"         ","     "))      
   
                                                  F     =     replace(F,"     ",",")      
   
                          end     function      
   
       
   
  </script>      
   
  做完这件事需要187.5豪秒      
   
  皮疹,晕厥,肤泻,恶心,呕吐,心悸,喉水肿,过敏性休克,寒战,*胸闷,*气急,变态反应,腹痛,荨麻疹,过敏样反应,多汗,头晕,舌麻痹,瘙痒,震颤,红斑疹      
   
       
   
  ------------------------------------      
   
       
   
  修改后:      
   
  <script     language=vbs>      
   
                          '以下是测试部分      
   
                          dim     vbsBegin     :     vbsBegin     =     Timer()      
   
                          dim     a          
   
                          a="皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹"      
   
       
   
                          '创建对象          
   
                               
   
                          dim     vbstest     :     vbstest     =     1000      
   
                          dim     result     :     result     =     ""      
   
                          for     j     =0     to     vbstest      
   
                                                  result     =     F(a)          
   
                          next      
   
                          dim     vbsEnd     :     vbsEnd     =     Timer()      
   
                          document.write     "做完这件事需要"     &     (vbsEnd     -     vbsBegin)     *     1000         &     "豪秒<br/>"      
   
                          document.write     result      
   
                               
   
                          function     F(x)          
   
                                                  dim     A,S,tag,aaa      
   
                                                  S     =     ","      
   
                                                  A     =     split(x,",")                                                                              
   
                                                  for     each     aaa     in     A                                                                                  
   
                                                                          if     instr(S,","     &     aaa     &     ",")<1     then     S=         S     &     aaa         &     ","      
   
                                                  next                                                                                  
   
                                                  F     =     mid(s,2,len(s)-2)      
   
                          end     function      
   
  </script>      
   
  做完这件事需要140.625豪秒      
   
  皮疹,晕厥,肤泻,恶心,呕吐,心悸,喉水肿,过敏性休克,寒战,*胸闷,*气急,变态反应,腹痛,荨麻疹,过敏样反应,多汗,头晕,舌麻痹,瘙痒,震颤,红斑疹      
   
  ---------------------------------------------------------------      
   
     
   
       
  Top

4 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2006-03-18 13:51:39 得分 0

我也来凑一下热闹..执行成功,     可能数据量太小了..显示0.000      
   
       
   
  <%      
   
                          Dim     strSource,     strOK,     i,     arrStr,     startTime      
   
                          startTime                             =     Timer()      
   
                          strSource                             =     "皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑"      
   
                          arrStr                                                                             =     Split(Replace(strSource,     "     ",     ""),     ",")      
   
                          strOk                                                                             =     ","      
   
                          For     i     =     0     to     UBound(arrStr)      
   
                                                  if     Instr(1,     strOk,     ","     &     arrStr(i)     &     ",",     1)     =     0     Then      
   
                                                                          strOk     =     strOk     &     arrStr(i)     &     ","      
   
                                                  End     If      
   
                          Next      
   
                          strOk     =     Mid(strOk,     2,     len(strOk)     -     2)      
   
                          response.Write(strOk)      
   
                          response.Write("<br>")      
   
                          response.Write("执行时间:     "     &     FormatNumber((Timer()     -     startTime)     *     1000,     3,     true)     &     "     毫秒")      
   
  %>      
   
       
   
  ---------------------------------------------------------------      
   
       
   
  再优化一下大笨狼的代码如下:      
   
  <script     language=vbs>      
   
                          '以下是测试部分      
   
                          dim     vbsBegin,a,j,vbstest,result,vbsEnd      
   
                          vbsBegin     =     Timer()      
   
                          vbstest     =     1000      
   
                          result     =     ""      
   
                          a="皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹"      
   
                          for     j     =     0     to     vbstest      
   
                                                  result     =     F(a)          
   
                          next      
   
                          vbsEnd     =     Timer()      
   
                          document.write     "做完这件事需要"     &     (vbsEnd     -     vbsBegin)     *     1000         &     "豪秒<br>"      
   
                          document.write     result      
   
       
   
                          function     F(x)          
   
                                                  dim     A,S,tag,aaa      
   
                                                  S     =     ","      
   
                                                  A     =     split(x,",")      
   
                                                  for     each     aaa     in     A      
   
                                                                          if     instr(S,","     &     aaa     &     ",")     <     1     then     S     =     S     &     aaa         &     ","      
   
                                                  next      
   
                                                  F     =     mid(s,2,len(s)-2)      
   
                          end     function      
   
  </script>      
   
  ---------------------------------------------------------------Top

5 楼cwm545(罪人)回复于 2006-03-18 14:00:19 得分 0

pli0825  
  我的意思是假如有一个数组,里面有以下这些数据:  
  001;002;aaa;bbb;001;.....  
   
   
  现在需要把它变为(即去掉重反复的并按顺序排列出来)  
  001;002;aaa;bbb;...  
  顺序就是要从小到大的排列。  
   
    superdullwolf    
  谢谢你,不过你的只能去掉重复的。  
  Top

6 楼pli0825(念叨念叨,我念叨死你!)回复于 2006-03-18 17:34:32 得分 0

从小到大??  
   
  字符串从小到大??  
  哪就是按照  
  ASCII码的顺序排喽。Top

7 楼KimSoft(革命的小酒天天醉-http://blog.csdn.net/kimsoft/)回复于 2006-03-18 18:32:21 得分 3

!!!Top

8 楼hanpoyangtitan(韩波洋)回复于 2006-03-18 18:41:12 得分 3

冒泡法,二分法Top

9 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2006-03-19 04:34:55 得分 0

 
  '***********************************************************  
  sub   sortA(   Arr)  
  '堆排序,复杂度n*log(n)/log(2),如果8个数就是24次,如果用冒泡是8^2=64次  
  dim   n,i,L,ir,rArr,j  
  n   =   ubound(Arr)   '7,8个元素  
          L   =   int(n   /   2)+1      
          ir   =   n  
          do  
                  if   L   >   1   then  
                          L   =   L   -   1  
                          rArr   =   Arr(L)  
                  else  
                          rArr   =   Arr(ir)  
                          Arr(ir)   =   Arr(1)  
                          ir   =   ir   -   1  
                          if   ir   =   1   then  
                              Arr(1)   =   rArr  
                              exit   sub  
                          end   if  
                  end   if  
                  i   =   L  
                  j   =   2   *   L      
                  while   j   <=   ir  
                          if   j   <   ir   then  
                                  if   Arr(j)   <   Arr(j   +   1)   then   j   =   j   +   1  
                          end   if  
                          if   rArr   <   Arr(j)   then  
                                  Arr(i)   =   Arr(j)  
                                  i   =   j  
                                  j   =   2   *   j    
                          else  
                                  j   =   ir   +   1  
                          end   if  
                  wend  
                  Arr(i)   =   rArr  
          loop  
  end   sub  
  Top

相关问题

  • 数组排序
  • 数组排序?
  • 数组排序?
  • 数组排序----急
  • 数组长度和数组排序
  • ------------------------数组排序问题?-----------------------------------
  • 数组排序的问题........
  • 数组排序求教
  • 二维数组排序
  • 对象数组排序

关键词

  • 算法
  • 皮疹
  • 数组
  • 心悸
  • 字符串
  • 过敏样反应
  • 瘙痒
  • 呕吐
  • 过敏性休克
  • 荨麻疹

得分解答快速导航

  • 帖主:cwm545
  • pli0825
  • superdullwolf
  • KimSoft
  • hanpoyangtitan

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo