臭皮匠排序

{{算法信息框
|class=排序算法
|image =
|caption = 使用臭皮匠排序為一列數字進行排序的過程
|data=數組
|time = O(n^{\frac{\log 3}{\log 1.5}})
|space = O(n)
|optimal=No
}}

臭皮匠排序()是一种采用分治法的低效排序算法,甚至慢于冒泡排序。在《算法导论》第二版第7章(快速排序)的思考题中被提到,是由Howard、Fine等教授提出的所谓“漂亮的”排序算法。

该算法得名于三个臭皮匠,每个臭皮匠都能暴打其他两个,其他兩個也會卯起來扁其中一個。

实现
*如果最后一个值小于第一个值,则交换這兩個數
*如果当前集合元素数量大于等于3:
:#使用臭皮匠排序法排序前2/3的元素
:#使用臭皮匠排序法排序后2/3的元素
:#再次使用臭皮匠排序法排序前2/3的元素

algorithm stoogesort(array L, i = 0, j = length(L)-1)
if L[j] = 3 then
t = (j - i + 1) / 3
stoogesort(L, i , j-t)
stoogesort(L, i+t, j )
stoogesort(L, i , j-t)
return L

實作範例
Julia

Julia Sample : Stooge Sort

function StoogeSort(A,v1,v2)

if A[v1]>A[v2]
A[v1],A[v2] = A[v2],A[v1]
end

if (v2-v1+1)>2
t = Int(round((v2-v1+1)/3))

StoogeSort(A, v1 , v2-t)
StoogeSort(A, v1+t, v2 )
StoogeSort(A, v1 , v2-t)
end
return A
end

Main Code

A = [16,586,1,31,354,43,3]
println(A) # Original Array
println(StoogeSort(A,1,length(A))) # Stooge Sort Array

参考
*
*[http://www.everything2.com/index.pl?node=stooge%20sort Everything2.com – Stooge sort]
*[http://cg.scs.carleton.ca/~morin/misc/sortalg/ Sorting Algorithms(包含臭皮匠排序)]
*[http://impomatic.blogspot.com/2008/01/stooge-sort.html Stooge sort – implementation and comparison]

评论 (0)

  • 还没有评论,来抢沙发吧。