Stooge 排序

时间:2020-12-03 03:56:56

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

实现

  • 如果最后一个值小于第一个值,则交换它们
  • 如果当前子集元素数量大于等于3:
  1. 使用Stooge排序前2/3的元素
  2. 使用Stooge排序后2/3的元素
  3. 再次使用Stooge排序前2/3的元素
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<stdbool.h> void swap(int *a, int *b) //交换两元素的值
{
int t;
t=*a;
*a=*b;
*b=t;
} void printArray(int a[], int count) //打印数组元素
{
int i;
for(i=; i<count; i++)
printf("%d ",a[i]);
printf("\n");
} void stooge_sort(int a[], int left, int right)
{ int t;
if(a[left]>a[right])
swap(&a[left], &a[right]);
if(right-left+ >= )
{
t=(right-left+)/;
stooge_sort(a,left,right-t);
stooge_sort(a,left+t,right);
stooge_sort(a,left,right-t);
} } int main(void)
{
int a[]={, , , , , , , , };
int n=sizeof(a)/sizeof(*a);
printArray(a,n);
stooge_sort(a,,n-);
printArray(a,n);
return ;
}

算法的复杂度正比于: T(n)=3T(2n/3)+1. 已被证明时间复杂度接近于O(n2.71) ,可见此算法效率相当的低下,比选择、插入、冒泡排序更差