AUTOIT3一维数组排序问题

递归冒泡法去对1维数组排序,为什么最后得不到这个数组呢?#include<array.au3>Dim$a[10]=[1,2,3,4,5,6,7,8,9,10]$a=_so... 递归冒泡法去对1维数组排序,为什么最后得不到这个数组呢?
#include <array.au3>Dim $a[10]=[1,2,3,4,5,6,7,8,9,10]$a=_sort($a)_ArrayDisplay($a)
Func _sort($array) $t="End" For $i = 1 to UBound($array)-1 If $array[$i] > $array[$i-1] Then $t=$array[$i-1] $array[$i-1]=$array[$i] $array[$i]=$t EndIf Next If $t="End" Then Return($array) EndIf _sort($array)EndFunc
展开
 我来答
百度网友5311d79
推荐于2018-05-06 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3220万
展开全部

利用调试方法,把$a=_sort($a)后的_ArrayDisplay($a)这句修改为:

If IsArray($a) Then
    _ArrayDisplay($a)
Else
    MsgBox(0,"",$a)
EndIf

可以看到返回后的$a不是数组,弹出的对话框显示值为0,这说明_sort函数不能将数组正确返回。

这是因为函数默认是传值而不是传址,传值即意味着传入的变量不能被修改。传值方式下,数组$array只是$a的一个拷贝,$array在函数的地址空间内,函数返回此空间就释放了,原$a的值不受影响。

修改建议就是,使用ByRef改为传址方式。传址方式下,$array直接指向$a的地址空间,这样允许传入的变量被函数直接修改。函数直接return即可,无需返回任何值。

#include <array.au3>
Local $a[10] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
_sort($a)
_ArrayDisplay($a)

Func _sort(ByRef $array)
$t = "End"
For $i = 1 To UBound($array) - 1
If $array[$i] > $array[$i - 1] Then
$t = $array[$i - 1]
$array[$i - 1] = $array[$i]
$array[$i] = $t
EndIf
Next
If $t == "End" Then Return
_sort($array)
EndFunc   ;==>_sort
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式