实现二叉插入排序时,能否用递归返回的更新数组再次调用递归?
二叉插入排序递归问题解答
我正尝试实现二叉插入排序,现有待排序数组a。通过递归找到单个元素的正确位置后,方法会返回该元素已归位、其余元素仍无序的数组,以便继续排序下一个元素。但目前遇到的问题是,递归并未使用更新后的数组,每个元素都是基于原始未排序数组独立排序的。请问是否可以将返回的更新数组作为参数,再次调用该递归方法?
相关代码片段:
for (int i = 1; i < a.Length; i++) { a = BinaryInsertSort(a, middle, LeftPointer, RightPointer, i); }
当然可以这么做,而且这正是解决你当前问题的关键。
你现在写的循环逻辑已经在尝试把每次排序后的数组重新赋值给a,再传入下一次的BinaryInsertSort调用——这路子是对的,这样后续元素的排序就能基于前一个元素归位后的已更新数组进行,不会再用原始数组重复操作。
需要注意两个细节:
- 得确保
BinaryInsertSort方法内部真的是在传入的数组基础上修改并返回正确的更新后数组,别是操作了原始数组的副本或者始终返回初始状态的数组。 - 检查
middle、LeftPointer、RightPointer这几个参数,每次循环调用时要正确初始化或更新,别因为这些指针没跟着数组变化调整,导致递归找位置的时候出错。
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

