为了账号安全,请及时绑定邮箱和手机立即绑定

如下,请问递归冒泡法去对1维数组排序,为什么最后得不到这个数组?

如下,请问递归冒泡法去对1维数组排序,为什么最后得不到这个数组?

萧十郎 2022-04-15 15:11:51
#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
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

利用调试方法,把$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] = [12345678910]_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


查看完整回答
反对 回复 2022-04-19
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信