C 语言选择排序2025年1月12日 | 阅读10分钟 在本文中,我们将讨论 C 语言中的选择排序及其不同的属性和实现。 选择排序是一种简单的排序算法,它通过重复从数组的未排序部分中选择最小(或最大)元素并将其移动到已排序部分的末尾来工作。这个过程会重复进行,直到整个数组被排序。 它是一种基于比较的排序算法。它通过将输入数组分成两部分来工作:已排序部分和未排序部分。在每次迭代中,它从未排序部分中找到最小(或最大,取决于排序顺序)的元素,并将其与未排序部分的第一个元素交换。这个过程会重复进行,直到整个数组被排序。 选择排序是一种直接有效的排序算法,它不断地将列表中未排序部分的最小(或最大)元素移动到列表的已排序部分。 示例未排序数组:[38, 52, 9, 18, 6, 23, 40, 15] 步骤 1:初始数组 数组分为两部分:已排序部分(初始为空)和未排序部分(所有元素)。 步骤 2:查找最小元素 在第一次迭代中,我们在数组的未排序部分中查找最小元素,即 6。 步骤 3:交换并扩展已排序部分 我们将最小元素 (6) 与未排序部分 (38) 的第一个元素交换。 已排序部分 (6) 已经扩展,未排序部分已经缩小。 步骤 4:对剩余的未排序部分重复 现在,我们对剩余的未排序部分 ([52, 9, 18, 38, 23, 40, 15]) 重复此过程。此部分的最小元素是 9。 步骤 5:再次交换并扩展 我们将最小元素 (9) 与剩余未排序部分的第一个元素 (52) 交换。 已排序部分 (6, 9) 已经扩展,未排序部分已经缩小。 步骤 6:重复步骤 4 和 5 对剩余的未排序部分 ([52, 18, 38, 23, 40, 15]) 重复此过程。最小元素是 15。 步骤 7:再次交换并扩展 将最小元素 (15) 与剩余未排序部分 (52) 的第一个元素交换。 已排序部分 (6, 9, 15) 已经扩展,未排序部分进一步缩小。 步骤 8:重复步骤 4 和 5 对剩余的未排序部分 ([18, 38, 23, 40, 52]) 重复此过程。最小元素是 18。 步骤 9:再次交换并扩展 将最小元素 (18) 与剩余未排序部分的第一个元素 (38) 交换。 已排序部分 (6, 9, 15, 18) 已经扩展,未排序部分进一步缩小。 步骤 10:重复步骤 4 和 5 对剩余的未排序部分 ([38, 23, 40, 52]) 重复此过程。最小元素是 23。 步骤 11:再次交换并扩展 将最小元素 (23) 与剩余未排序部分 (38) 的第一个元素交换。 已排序部分 (6, 9, 15, 18, 23) 已经扩展,未排序部分进一步缩小。 步骤 12:重复步骤 4 和 5 对剩余的未排序部分 ([38, 40, 52]) 重复此过程。最小元素是 38。 步骤 13:再次交换并扩展 将最小元素 (38) 与剩余未排序部分的第一个元素 (40) 交换。 已排序部分 (6, 9, 15, 18, 23, 38) 已经扩展,未排序部分进一步缩小。 步骤 14:最终迭代 最后,我们对剩余的未排序部分 ([40, 52]) 最后一次重复此过程。最小元素是 40。 步骤 15:最后一次交换和扩展 将最小元素 (40) 与剩余未排序部分的第一个元素(40,即相同元素)交换。 整个数组现在已按升序排序。 排序完成 整个数组现在已排序:[6, 9, 15, 18, 23, 38, 40, 52]。 这个详细的示例演示了选择排序如何通过重复从未排序部分中查找最小元素并将其放入已排序部分来工作。每次迭代都会扩展已排序部分并缩小未排序部分,直到整个数组被排序。 程序 1:使用迭代过程让我们通过一个示例来理解 C 语言中使用迭代过程的选择排序概念。 输出 Original array: 38 52 9 18 6 23 40 15 Sortеd array: 6 9 15 18 23 38 40 52 说明
复杂度分析时间复杂度 在提供的代码中,选择排序算法的时间复杂度为 O(n^2),其中 "n" 是数组中的元素数量。这是由于嵌套循环:
空间复杂度
程序 2:使用递归过程让我们通过一个示例来理解 C 语言中使用递归过程的选择排序概念。 输出 Original array: 38 52 9 18 6 23 40 15 Sortеd array: 6 9 15 18 23 38 40 52 说明
复杂度分析时间复杂度 递归选择排序算法的时间复杂度为 O(n^2),其中 "n" 是数组中的元素数量。递归函数有两个嵌套循环:外层循环迭代数组,内层循环也迭代数组中剩余的未排序部分。 然而,算法的递归性质并没有改变其基本的时间复杂度。递归仍然涉及检查所有元素对,进行比较,并可能交换它们。递归调用的次数和迭代次数与迭代版本相同。 空间复杂度 递归选择排序算法的空间复杂度为 O(n),其中 "n" 是数组中的元素数量。这是由于递归调用堆栈所使用的空间。 在每次递归调用中,函数的参数和局部变量都存储在调用堆栈上。由于算法进行 O(n) 次递归调用(数组中的每个元素一次),因此空间复杂度与递归深度成正比,即 O(n)。 递归函数调用所使用的额外空间是导致空间复杂度的原因,这使其与迭代版本不同,迭代版本的空间复杂度为 O(1),因为它是在原地操作的。 下一主题C 语言编程测试 |
我们请求您订阅我们的新闻通讯以获取最新更新。