如下,请问递归冒泡法去对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

萧十郎
浏览 138回答 1
1回答

呼唤远方

利用调试方法,把$a=_sort($a)后的_ArrayDisplay($a)这句修改为:If&nbsp;IsArray($a)&nbsp;Then&nbsp;&nbsp;&nbsp;&nbsp;_ArrayDisplay($a)Else&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(0,"",$a)EndIf可以看到返回后的$a不是数组,弹出的对话框显示值为0,这说明_sort函数不能将数组正确返回。这是因为函数默认是传值而不是传址,传值即意味着传入的变量不能被修改。传值方式下,数组$array只是$a的一个拷贝,$array在函数的地址空间内,函数返回此空间就释放了,原$a的值不受影响。修改建议就是,使用ByRef改为传址方式。传址方式下,$array直接指向$a的地址空间,这样允许传入的变量被函数直接修改。函数直接return即可,无需返回任何值。#include&nbsp;<array.au3>Local&nbsp;$a[10]&nbsp;=&nbsp;[1,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5,&nbsp;6,&nbsp;7,&nbsp;8,&nbsp;9,&nbsp;10]_sort($a)_ArrayDisplay($a)&nbsp;Func&nbsp;_sort(ByRef&nbsp;$array)&nbsp;&nbsp;&nbsp;&nbsp;$t&nbsp;=&nbsp;"End"&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;$i&nbsp;=&nbsp;1&nbsp;To&nbsp;UBound($array)&nbsp;-&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;$array[$i]&nbsp;>&nbsp;$array[$i&nbsp;-&nbsp;1]&nbsp;Then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$t&nbsp;=&nbsp;$array[$i&nbsp;-&nbsp;1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$array[$i&nbsp;-&nbsp;1]&nbsp;=&nbsp;$array[$i]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$array[$i]&nbsp;=&nbsp;$t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EndIf&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;$t&nbsp;==&nbsp;"End"&nbsp;Then&nbsp;Return&nbsp;&nbsp;&nbsp;&nbsp;_sort($array)EndFunc&nbsp;&nbsp;&nbsp;;==>_sort
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Oracle
MySQL