快速排序是不稳定的?请对你的结论给出严格的证明。

singelfish 2004-12-29 08:19:52
这个题应该怎么回答亚?请高人指点
...全文
861 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mxfeng 2005-01-04
  • 打赏
  • 举报
回复
同意,学习
zhenming_liu 2005-01-02
  • 打赏
  • 举报
回复
主要有两种快速排序, 一种是Pivot random选择, 另一种是Pivot固定选择,

Random选择的时候, 对某个特定的input, 期待值总是O(n logn), 这也就意味着对任何input都有可能用N^2

不是random的时候, 如果input的分布均匀, 那么平均值是O(n logn), 但是, 对某些特定的input, 总是需要N^2, 例如, 排序 1, 2, 3, 4, 5, 6,... 每次QSort都会讲长度为n的array分成n-1和0分, 所以run time 是 n + n - 1 + n - 2 + .... + 1 = n^2

"Introduction to Algorithms"有对random选择的分析, The Art of Computer Programming有对另一种算法的分析


Impulse_Boy 2005-01-02
  • 打赏
  • 举报
回复
证明去Quick Sort是不稳定的,只需举出其不是稳定的例子即可。
例:
待排序数组: int a[] ={1, 2, 2, 3, 4, 5, 6};
在快速排序的随机选择比较子阶段,若选择a[2]为比较子,即数组中的第二个2,而把大于等于比较子的数均放置在大数数组中,则a[1],即数组中的第一个2。那么数组中的两个2非原序。
若选择a[1]为比较子,而把小于等于比较子的数均放置在小数数组中,则数组中的两个2顺序也非原序
这就说明,Quick Sort是不稳定的。
ZhangYv 2004-12-31
  • 打赏
  • 举报
回复
从定义的角度直接说明就可以了。
singelfish 2004-12-30
  • 打赏
  • 举报
回复
比如2,1,1(2)三个数做快速排序,结束后数列为1(2),1,2
相对位置发生了变化
这应该是一个反例吧?
rickone 2004-12-30
  • 打赏
  • 举报
回复
快速排序会出现很糟糕的情况,时间复杂度会下降到O(n^2)

但是,特殊情况出现的概率很小,更一般的情况是一团无序的数据,这样就会显得快速了。
xdspower 2004-12-29
  • 打赏
  • 举报
回复
证明一个不稳定举一个实现过程中不稳定的例子就行了,一般书上都会提的,自己也可以想一个。

33,025

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧