快速排序 vs 归并排序:有什么区别?2025年4月19日 | 阅读 9 分钟 排序是指将集体数据按特定格式(如升序或降序)排列。通常,它用于以排序的方式排列同类数据。使用排序算法,我们可以按顺序排列数据,并轻松快速地搜索元素。排序技术取决于两种情况,即执行程序所需的总时间和总空间。在本节中,我们将讨论快速排序和归并排序,并对它们进行比较。 ![]() 快速排序快速排序是一种基于比较的排序算法,它遵循分治技术来排序数组。在快速排序中,我们通常使用枢轴(键)元素来根据某些条件比较和交换元素的位置。当枢轴元素在数组中获得固定位置时,这表明比较和交换过程已终止。之后,数组被分成两个子数组。第一个分区包含所有小于枢轴(键)元素的元素,而另一个分区包含所有大于枢轴元素的元素。之后,它再次在每个子数组中选择一个枢轴元素,并重复相同的过程,直到数组中的所有元素都被排序为止。 快速排序算法Partition (A, p, r)
Quicksort (A, p, r)
使用快速排序算法对数组进行排序的步骤 假设我们有一个包含元素 X[1], X[2], X[3], ... , X[n] 的数组 X 需要进行排序。让我们按照以下步骤使用快速排序对数组进行排序。 步骤 1:将数组的第一个元素设置为枢轴或键元素。此处,我们假设枢轴为 X[0],左指针指向第一个元素,右指针指向数组元素的最后一个索引。 步骤 2:现在我们从右侧索引开始扫描数组元素,然后 如果 X[key] 小于 X[right] 或如果 X[key] < X[Right],
步骤 3:现在我们再次从左侧开始扫描元素,并将每个元素与键元素进行比较。X[key] > X[left] 或 X[key] 大于 X[left],则执行以下操作
步骤 4:重复步骤 2 和 3,直到 X[left] 等于 X[key]。因此,我们可以说,如果 X[left] = X[key],则表示过程终止。 步骤 5:之后,左侧的所有元素都将小于键元素,而右侧的其余元素都将大于键元素。这表明需要将数组划分为两个子数组。 步骤 6:类似地,我们需要对子数组重复执行上述过程,直到整个数组排序完成。 让我们看一个快速排序的例子。 示例:考虑一个包含 6 个元素的数组。使用快速排序对数组进行排序。 arr[] = {50, 20, 60, 30, 40, 56} ![]() 在上面的数组中,50 处于其正确的位置。因此,我们将小于枢轴的元素分成一个子数组,将大于枢轴元素的元素分成另一个子数组。 ![]() 因此,我们得到了排序后的数组。 让我们用 C 语言实现上述逻辑。 Quick.c 输出 Sorted Array is: Array = 50 20 60 30 40 56 归并排序归并排序是最重要的排序技术之一,它基于分治策略。它是用于排序文件中可用数据的最流行的排序技术。归并排序算法将给定数组分成两半(N/2)。然后,它递归地将两个子数组的元素集分成单个或单个元素,或者我们可以说直到无法再分割为止。之后,它比较相应元素以对元素进行排序,最后,将所有子元素合并以形成最终排序的元素。 使用归并排序算法对数组进行排序的步骤
让我们看一个归并排序的例子。 示例:考虑一个包含 9 个元素的数组。使用归并排序对数组进行排序。 arr[] = {70, 80, 40, 50, 60, 11, 35, 85, 2} ![]() 因此,我们使用归并排序得到了排序后的数组。 让我们用 C 语言实现上述逻辑。 Merge.c 输出 Predefined Array is 70 80 40 50 60 11 35 85 2 Sorted array using the Merge Sort algorithm 2 11 35 40 50 60 70 80 85 快速排序 vs. 归并排序
下一个主题bfs-和-dfs-的区别 |
我们请求您订阅我们的新闻通讯以获取最新更新。