Stooge 排序

臭皮匠排序

维基百科,自由的百科全书
臭皮匠排序
Sorting stoogesort anim.gif
使用臭皮匠排序為一列數字進行排序的過程
分類 排序算法
數據結構 數組
最差時間複雜度 O(nlog 3 /log 1.5)
最差空間複雜度 O(n)

Stooge 排序是一种低效的递归排序算法,甚至慢于冒泡排序。在《算法导论》第二版第7章(快速排序)的思考题中被提到,是由HowardFine等教授提出的所谓“漂亮的”排序算法。

该算法得名于三个臭皮匠,每个臭皮匠都打其他两个。[來源請求]

实现

  • 如果最后一个值小于第一个值,则交换它们
  • 如果当前子集元素数量大于等于3:
  1. 使用臭皮匠排序前2/3的元素
  2. 使用臭皮匠排序后2/3的元素
  3. 再次使用臭皮匠排序前2/3的元素
algorithm stoogesort(array L, i = 0, j = length(L)-1)     if L[j] < L[i] then
         L[i] ↔ L[j]     if (j - i + 1) >= 3 then
         t = (j - i + 1) / 3         stoogesort(L, i , j-t)         stoogesort(L, i+t, j )         stoogesort(L, i , j-t)     return L

参考



=========================================================

效率如此低,有什么意义呢......
证明正确性:
显然n = 1, 2, 3时,排序方法有效.
假设n < k时都成立
则n = k时,
t = (j - i + 1) / 3
sort(A, i, j - t) /*相当于将A的前2/3项排序,由假设,排序有效*/
sort(A, i + t, j) /*相当于将A的后2/3项排序,由假设,排序有效.此步操作将最大的1/3项放在了最右边,第一步排序确保了最大1/3项不可能出现在最左边1/3*/
sort(A, i, j - t) /*对A的前2/3项再次排序,由假设排序有效.此时只要对前2/3项排序就可以排序完成*/
综上.该排序算法正确.


时间复杂度O(n^log(3/2, 3))  (不会算)

转载于:https://my.oschina.net/locusxt/blog/179375

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值