c - C中数组的递归函数

标签 c arrays recursion quicksort

我正在尝试在 C 中实现快速排序。

我以前用 Python 做过,但我是 C 的新手,正在尝试(请不要建议我只使用 qsort()!)

我不明白的是,由于 C 不以与 Python 相同的方式处理数组,即它不能将它们传递给函数并从函数返回它们,只能将指针传递给一个(或者更确切地说,内存中空格的开头)——那么如何在递归函数中使用数组?

如果我的第一个调用采用float array[],选择一个主元并对其进行排序。我怎样才能对下分区和上分区进行连续调用,并将它们粘在一起?!

除非我弄错了,否则粘合在一起需要迭代,因为您不能分配给数组。但是我们不能那样做,因为我们不知道每次调用需要多少内存——而且空间需要不同,因为我们仍然需要更高的空间(在较早的调用中)...

我试过代码,我试过笔和纸,我就是无法完成这项工作——我从概念上理解递归(实际上,在 Python 中),我只是看不出如何在 C 中做到这一点. 我希望有一些我不知道的功能或语法。

一如既往的感激。

最佳答案

据我所知,C 中快速排序算法的大多数实现都是对给定数组进行排序 “就地”,并且不返回排序数组。

这里显示了一个可能有助于理解该方法的非常简单的实现:

如您所见,该函数只是传递具有修改的开始/结束的相同数组 递归调用函数的索引。 当传递给函数时,数组衰减为指向第一个元素的指针, 所以所有递归调用的函数都在(的一部分)上运行 相同的原始数组。

其他实现可能会用迭代或尾递归代替递归, 看例子

它具有指向现实世界实现的链接。

关于c - C中数组的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20586788/

相关文章:

sql - 递归 cte - 标记所有叶子

asp.net-mvc - MVC Razor @helper 函数无法正确递归?

objective-c - 如何将函数的结果作为宏变量传递?

python - SWIG C 到 Python 整数数组

Python 增强赋值问题

Java 将带有换行符的字符串拆分为数组,其中使用缓冲读取器从文件中读取字符串

ios - 打印出一个字符串的所有组合

c - 如何从 Matlab C API 调用 engClose() 并等待其进程关闭?

c++ - 一个 VBO 可以绑定(bind)到多个 VAO 吗?

android - 应用程序在数组末尾崩溃