Quicksort 能否既稳定又到位?
Can Quicksort be both stable and in place?
我想知道你是否可以解决我在考试中做错的问题。
考试的时候,题目是“能否快速排序稳定到位”。
我说是。我知道快速排序的默认实现不稳定,因为它最终可能会交换重复项,但我记得读过它可以通过将重复元素和索引作为附加参数来使其稳定。这需要一些额外的存储空间,所以理论上,它不会到位。
我还是放yes因为根据这篇G4G文章,可以让它稳定就地:
https://www.geeksforgeeks.org/stable-quicksort/。他们在某个时候说“使其稳定要么需要 N 阶存储(如在天真的实现中),要么需要一些额外的逻辑用于就地版本。”
问题是,他们没有给出这个“额外逻辑”版本的实现。我一直在网上搜索,试图找到快速排序的就地和稳定实施,但无济于事,所以现在我想知道我是否真的错了,不可能既就地又稳定。希望有人能解决这个问题。谢谢!
“快速排序”指的是一种不稳定但就地的特定算法。
“快速排序可以...”是一个非常模糊的问题,因为它表明您可以制作某种可以称为“快速排序”的排序算法,即使它是 根本不是快速排序,因为它足够接近...但是当然没有人定义你必须有多接近。
真正的答案是“不”,因为快速排序不稳定。
很有可能预期的答案是“是”,因为您在 class 中被告知 有一种方法可以通过做一些您知道的事情来使快速排序稳定在现实生活中不会这样做,比如在分区步骤中移动而不是交换。
我想知道你是否可以解决我在考试中做错的问题。
考试的时候,题目是“能否快速排序稳定到位”。
我说是。我知道快速排序的默认实现不稳定,因为它最终可能会交换重复项,但我记得读过它可以通过将重复元素和索引作为附加参数来使其稳定。这需要一些额外的存储空间,所以理论上,它不会到位。
我还是放yes因为根据这篇G4G文章,可以让它稳定就地: https://www.geeksforgeeks.org/stable-quicksort/。他们在某个时候说“使其稳定要么需要 N 阶存储(如在天真的实现中),要么需要一些额外的逻辑用于就地版本。”
问题是,他们没有给出这个“额外逻辑”版本的实现。我一直在网上搜索,试图找到快速排序的就地和稳定实施,但无济于事,所以现在我想知道我是否真的错了,不可能既就地又稳定。希望有人能解决这个问题。谢谢!
“快速排序”指的是一种不稳定但就地的特定算法。
“快速排序可以...”是一个非常模糊的问题,因为它表明您可以制作某种可以称为“快速排序”的排序算法,即使它是 根本不是快速排序,因为它足够接近...但是当然没有人定义你必须有多接近。
真正的答案是“不”,因为快速排序不稳定。
很有可能预期的答案是“是”,因为您在 class 中被告知 有一种方法可以通过做一些您知道的事情来使快速排序稳定在现实生活中不会这样做,比如在分区步骤中移动而不是交换。