找回密码
 加入
搜索
查看: 3932|回复: 8

[AU3基础] 将随机数插入到随机产生的有序数组中的问题?[已解决]

[复制链接]
发表于 2010-4-8 16:57:31 | 显示全部楼层 |阅读模式
本帖最后由 newuser 于 2010-4-23 09:49 编辑

2个小时,我都蒙了,插入的条件我怎么越琢磨越糊涂???
$i=$N-2就说明新产生的随机数大于随机数组中所有数;
不等,则说明小于随机数组中所有数?我理解不上去啊!

#include <array.au3>
Const $N=12 ;数组下标,因为要插入一个新元素,所以下标从11变为12
Dim $i,$RandomNumArray[$N],$Num
;下面的For语句用来随机取10个数
For $i=1  To $N-2
        $RandomNumArray[$i]=Random(1,10,1)
Next
;下面的For语句用来对随机数组进行从小到大的排序
For $i=1 To $N-3
        For $j=$i+1  To $N-2
                If $RandomNumArray[$j]<$RandomNumArray[$i] Then
                        $t=$RandomNumArray[$i]
                        $RandomNumArray[$i]=$RandomNumArray[$j]
                        $RandomNumArray[$j]=$t
                EndIf
        Next
Next
_ArrayDisplay($RandomNumArray,"显示随机有序数组")
$Num=Random(1,10,1) ;新生成1个随机数用于插入上面生成的有序数组中去
MsgBox(0,"插入新元素","将要插入数据"&$Num&"到刚才的数组中")
;下面For语句的目的应该是遍历数组中所有元素在与新生成的$Num对比大小后再插入到合适位置
;以下是我不理解的 ?
;$i=$N-2 ,$Num就大于有序数组中的所有元素,否则就小于其中所以元素?
;但如果这么理解$RadomArray[$i]=$RadomArray[$N-2]就好理解些,随机数组中的元素都相等?但此时$Num为什么不能小于所有取得的随机元素?
For $i=1 To $N-2 ;开始For遍历
        If $i<>$N-2 Then
                If ($Num>=$RandomNumArray[$i] And $Num<$RandomNumArray[$i+1]) _
                        Or ($i=1 And $Num<$RandomNumArray[$i+1]) Then ;这个条件看不懂?
                  For $j=$N-1 To $i+2 Step -1  ;还看不懂?
                          $RandomNumArray[$j]=$RandomNumArray[$j-1] ;如果插入一个新元素,往后挪
                  Next
                  $RandomNumArray[$i+1]=$Num
                  ExitLoop
          EndIf
  Else
          $RandomNumArray[$i+1]=$Num
          ExitLoop
  EndIf
Next
_ArrayDisplay($RandomNumArray,"插入数据后的有序数组")

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2010-4-9 09:23:16 | 显示全部楼层
回复 1# newuser

恳请帮助讲解以上代码中的$i=$N-2 $i<>$N-2的条件判断
 楼主| 发表于 2010-4-9 10:35:00 | 显示全部楼层
回复 1# newuser

希望不要沉底,请大家帮助详解,再线等待中!
 楼主| 发表于 2010-4-9 14:01:49 | 显示全部楼层
回复 1# newuser

再顶不要沉,等待回答...
发表于 2010-4-9 14:57:29 | 显示全部楼层
有个函数叫_ArrayInsert
 楼主| 发表于 2010-4-9 17:09:13 | 显示全部楼层
回复 5# 大绯狼

我目前想搞懂以上的代码,在 进入更深层次的研究,谢谢!能帮助解答我的疑惑吗?谢谢!
 楼主| 发表于 2010-4-10 10:33:18 | 显示全部楼层
回复 6# newuser
不要拍砖,坚持等到回答...
发表于 2010-4-10 11:25:27 | 显示全部楼层
本帖最后由 大绯狼 于 2010-4-10 12:52 编辑
#include <Array.au3>
Dim $Rnum[10]
For $i = 0 To 9
        $Rnum[$i] =Random(0,100,1)
Next
_ArraySort($Rnum);排序我就不排了
_ArrayDisplay($Rnum)
$ins = Random(0,100,1)
If $ins > $Rnum[UBound($Rnum) - 1] Then
        ReDim $Rnum[UBound($Rnum) + 1]
        $Rnum[UBound($Rnum) - 1] = $ins
Else
        For $i = 0 To 9
                If $Rnum[$i] > $ins Then
                        ReDim $Rnum[UBound($Rnum) + 1]
                        For $j = UBound($Rnum) To $i + 1 Step - 1
                                If $j = 1 Then ExitLoop
                                $Rnum[$j - 1] = $Rnum[$j - 2]
                        Next
                        $Rnum[$i] = $ins
                        ExitLoop
                EndIf
        Next
EndIf
_ArrayDisplay($Rnum)

评分

参与人数 2金钱 +60 收起 理由
sensel + 40
afan + 20

查看全部评分

发表于 2010-4-27 16:09:24 | 显示全部楼层
群主是怎么理解的,说下,我也被这问题困惑很久了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-13 18:34 , Processed in 0.077708 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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