传说中的stooge-sort~~

dogygb 2007-05-27 09:03:42
之前在introduction to algorithms 看到讲这个的题,没有看懂怎么证明其正确性的~~能不能给我讲一下
...全文
421 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fixphy1985 2007-05-28
  • 打赏
  • 举报
回复
每次处理的子序列的起点和终点
fire_woods 2007-05-28
  • 打赏
  • 举报
回复
i和j都是啥?
fixphy1985 2007-05-28
  • 打赏
  • 举报
回复
算错了…… 是pow(n,ln3/ln1.5)
fixphy1985 2007-05-28
  • 打赏
  • 举报
回复
不高啊,实际上它和快速排序的复杂度是一个数量级的,都是n*log(n)
fire_woods 2007-05-28
  • 打赏
  • 举报
回复
时间复杂度高啊.

计算公式:
O(n)=O(2/3*n)*3;

所以可以推算出
O(n)=pow(n,ln3/ln1.5)=pow(n,2.7)
比普通的O(n*n)还要慢.
TAOBO2 2007-05-28
  • 打赏
  • 举报
回复
这个排序方法最好的地方在于 它很简洁,漂亮,递归版本不到10行就写完了
TAOBO2 2007-05-27
  • 打赏
  • 举报
回复
我是用归纳法证明的,可以参考以下:
1,当n=1,2,3时,是可以成功排序的
2,设3~n-1都成立,那么n个数时,程序如下递归调用:
k=(j-i+1)/3 ;//j-i+1=n
STOOGE-SORT(A,i,j-k);//A数组的前(2/3)n<n,有归纳假设是可以成功排序的
STOOGE-SORT(A,i+k,j);//同理,后(2/3)n也排序了,且最大的(1/3)n个数(不可能出现在最左 边的(1/3)n中)被放在数组最后了
STOOGE-SORT(A,i,j-k);//此时,只剩下前(2/3)n需要再排序一下

证明完毕
dogygb 2007-05-27
  • 打赏
  • 举报
回复
自己顶一下

33,008

社区成员

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

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