arrays - 傀儡排序是如何工作的?

标签 arrays algorithm sorting

Stooge sort 是一种排序算法,描述如下:

Stooge-Sort(A,i,j)
if(A[i]>A[j]])
  then exchange(A[i],A[j])
if i+1>=j 
  then return
k = [(j-i+1)/3]
Stooge-Sort(A,i,j-k)
Stooge-Sort(A,i+k,j)
Stooge-Sort(A,i,j-k)

该算法的运行时间很糟糕,我知道这一点。
问题:我想知道这个算法是如何工作的?

最佳答案

您对子数组的第一个和最后一个元素进行排序。 (如果需要交换)

然后递归地对子数组的前 2/3rd、子数组的后 2/3rd 和前 2/3rd 进行排序> 子数组。

要证明正确性,您可以使用归纳法。

1. Clearly this algo works for 0, 1 and 2 element array.
2. Assuming it works for all arrays shorter than subarray
   [i, j] let's prove it works for array[i,j] also. Let's
   divide range[i,j] in 3 parts x, y and z;
    a. After Stooge-Sort(A,i,j-k), or [xy], every element in range
       y are larger than that of x. (Because range [xy] has
       lesser elements than range[i,j])
    b. After Stooge-Sort(A,i+k,j), or [yz], all largest elements
       have moved to z and are sorted. So z is sorted and contains
       largest elements of the array.
    c. After Stooge-Sort(A,i,j-k), or [xy], first (2/3)rd part of
       array is also sorted making the complete array sorted.

从步骤 a、b 和 c,我们可以得出 x、y 和 z 部分已排序并且 x 的所有元素都大于(或等于)y,并且 z 的所有元素都(大于或等于)z 和整个数组已排序。

关于arrays - 傀儡排序是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7682287/

相关文章:

c - 在 C 中对二维字符串数组进行排序

javascript - 在字符串变量中的字符之前插入几个字符(javascript)

algorithm - 优化参数的类强盗算法?

java - "Count Complete Tree Nodes"- 如何优化解决方案?

javascript - 是否可以使用原始 sort() 方法在我的算法中对数组进行排序?

sorting - 如何找到矩阵排序的下界?

javascript - 使用 indexOf 比较数组的第一个和下一个元素。 JavaScript

javascript - 这个 JavaScript 对象是如何转换为字符串的?

algorithm - 使用 Octave/Matlab 将多个靠近的 Blob 组合成一个 Blob

matlab - 在Matlab中,如何对嵌套结构进行排序?