你怎么能保证quicksort会对整数数组进行排序?

时间:2012-02-27 21:36:37

标签: arrays algorithm quicksort integer

在一次演讲中被问到这个问题......有点难过。

如何保证quicksort总是对整数数组进行排序?

感谢。

3 个答案:

答案 0 :(得分:3)

无条件抄袭Wikipedia

  

分区算法的正确性基于以下内容   两个论点:

     
      
  • 在每次迭代中,到目前为止处理的所有元素   处于所需位置:在枢轴之前,如果小于枢轴的位置   值,在枢轴后,如果大于枢轴的值(循环   不变)。
  •   
  • 每次迭代都会留下少一个要处理的元素   (循环变体)。
  •   
     

可以证明整个算法的正确性   通过归纳:对于零个或一个元素,算法保留数据   不变;对于更大的数据集,它产生两个串联   零件,小于枢轴的元件和大于它的元件,   他们自己按递归假设排序。

答案 1 :(得分:1)

你的教授可能指的是“稳定性”。看看这里:http://en.wikipedia.org/wiki/Stable_sort#Stability。稳定的排序算法使用相同的密钥保持记录的相对顺序。如果所有键都不同,则不需要这种区别。

Quicksort(在高效实现中)不是一种稳定的排序,因此保证稳定性的一种方法是确保阵列中没有重复的整数。

答案 2 :(得分:1)

通过获取数据透视值并将剩余数据分类到两个组来进行Quicksort功能。一个更高,一个更低。然后依次对每个组执行此操作,直到获得不大于1的组。此时,您可以保证数据已排序,因为您可以保证任何数据透视值都在正确的位置,因为您已直接将其与另一个数据透视值(也在正确的位置)进行比较。最后,您将留下1或0大小的集合,这些集合无法排序,因为它们无法重新排列,因此已经排序。

希望这会有所帮助,这是我们为A Level Further Mathematics(英国16-18)所教授的。