算法(第四版)C#题解――2.3
整个项目都托管在了 Github 上: https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更为方便的版本见: https://alg4.ikesnowy.com/ 这一节内容可能会用到的库文件有 Quick,同样在 Github 上可以找到。 善用 Ctrl + F 查找题目。 2.3.1 按照 Partition() 方法的轨迹的格式给出该方法是如何切分数组 E A S Y Q U E S T I O N 的。 2.3.2 按照本节中快速排序所示轨迹的格式给出快速排序是如何将数组 E A S Y Q U E S T I O N 排序的(出于练习的目的,可以忽略开头打乱数组的部分)。 2.3.3 对于长度为 N 的数组,在 Quick.sort() 执行时,其最大元素最多会被交换多少次? N / 2 在快速排序中,一个元素要被交换,有以下两种情况 1.该元素是枢轴,在切分的最后一步被交换 2.该元素位于枢轴错误的一侧,需要被交换到另一侧去 注意,以上两种情况在一次切分中只会出现一次 首先来看第一种情况,如果一个元素变成了枢轴 那么在之后的切分中该元素会被排除,不存在后续的交换。 因此我们的目标应该是: 最大的元素总是出现在错误的一侧,同时切分的次数尽可能多。 接下来我们来思考如何构造这样的数组