我正在尝试在 C 中实现快速排序。
我以前用 Python 做过,但我是 C 的新手,正在尝试(请不要建议我只使用 qsort()
!)
我不明白的是,由于 C 不以与 Python 相同的方式处理数组,即它不能将它们传递给函数并从函数返回它们,只能将指针传递给一个(或者更确切地说,内存中空格的开头)——那么如何在递归函数中使用数组?
如果我的第一个调用采用float array[]
,选择一个主元并对其进行排序。我怎样才能对下分区和上分区进行连续调用,并将它们粘在一起?!
除非我弄错了,否则粘合在一起需要迭代,因为您不能分配给数组。但是我们不能那样做,因为我们不知道每次调用需要多少内存——而且空间需要不同,因为我们仍然需要更高的空间(在较早的调用中)...
我试过代码,我试过笔和纸,我就是无法完成这项工作——我从概念上理解递归(实际上,在 Python 中),我只是看不出如何在 C 中做到这一点. 我希望有一些我不知道的功能或语法。
一如既往的感激。
最佳答案
据我所知,C 中快速排序算法的大多数实现都是对给定数组进行排序 “就地”,并且不返回新排序数组。
这里显示了一个可能有助于理解该方法的非常简单的实现:
如您所见,该函数只是传递具有修改的开始/结束的相同数组 递归调用函数的索引。 当传递给函数时,数组衰减为指向第一个元素的指针, 所以所有递归调用的函数都在(的一部分)上运行 相同的原始数组。
其他实现可能会用迭代或尾递归代替递归, 看例子
它具有指向现实世界实现的链接。
关于c - C中数组的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20586788/