臭皮匠排序

臭皮匠排序(英語:Stooge Sort)是一種採用分治法的低效排序算法,甚至慢於冒泡排序。在《算法導論》第二版第7章(快速排序)的思考題中被提到,是由HowardFine等教授提出的所謂「漂亮的」排序算法。

臭皮匠排序
使用臭皮匠排序為一列數字進行排序的過程
概況
類別排序算法
資料結構數組
複雜度
最壞時間複雜度
空間複雜度
最佳解No
相關變量的定義

該算法得名於三個臭皮匠,每個臭皮匠都能暴打其他兩個,其他兩個也會卯起來扁其中一個。[1]

實現

  • 如果最後一個值小於第一個值,則交換這兩個數
  • 如果當前集合元素數量大於等於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

實作範例

# 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

參考

  1. ^ 存档副本 (PDF). [2017-11-30]. (原始內容存檔 (PDF)於2017-12-01).