C++ 快速排序算法:比较次数统计
这是一个实现快速排序算法的 C++ 代码示例,该算法对整数向量进行排序并返回排序过程中进行的比较次数。该算法通过选择一个枢轴元素并将向量划分为两个子向量来工作 - 一个子向量包含小于或等于枢轴元素的元素,另一个子向量包含大于枢轴元素的元素。然后将枢轴元素放置在其正确的位置,并递归地在两个子向量上重复此过程。
排序过程中进行的比较次数通过在每次比较两个元素时递增一个计数器来跟踪。此外,交换操作中进行的比较次数也被添加到计数器中。
该函数接受三个参数 - 要排序的向量、要排序的子向量的起始索引和要排序的子向量的结束索引。如果起始索引大于或等于结束索引,则该函数返回 0(因为没有要排序的元素)。
枢轴元素被选为子向量中的第一个元素(即 arr[start])。然后将两个指针 (i 和 j) 分别初始化为 start+1 和结束索引。while 循环持续进行,直到 i 大于 j。第一个内层 while 循环递增 i,直到它到达大于枢轴元素的元素,第二个内层 while 循环递减 j,直到它到达小于或等于枢轴元素的元素。如果 i 小于 j,则交换这两个元素,并将交换计数器递增 2。
while 循环退出后,枢轴元素将与索引 j 处的元素交换,并将交换计数器递增 2。这将枢轴元素放置在其在排序向量中的正确位置。然后,该函数递归地调用自身来处理枢轴元素两侧的两个子向量,并将返回的比较计数添加到总计数中。
最后,该函数返回总比较计数。
原文地址: https://www.cveoy.top/t/topic/omqm 著作权归作者所有。请勿转载和采集!