`

Stooge 排序

阅读更多

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

实现

  • 如果最后一个值小于第一个值,则交换它们
  • 如果当前子集元素数量大于等于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=0; 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+1 >= 3)
    {
        t=(right-left+1)/3;
        stooge_sort(a,left,right-t);
        stooge_sort(a,left+t,right);
        stooge_sort(a,left,right-t);
    }
 
}

int main(void)   
{
    int a[]={3, 5, 4, 6, 9, 7, 8, 0, 1};
    int n=sizeof(a)/sizeof(*a);
    printArray(a,n);
    stooge_sort(a,0,n-1);
    printArray(a,n);
    return 0;
}
 
分享到:
评论

相关推荐

    JAVA实现StoogeSort方法排序

    JAVA实现StoogeSort方法排序,简单演示。

    排序算法之StoogeSort

    python 排序算法之StoogeSort

    希尔排序java代码

    最初的希尔排序使用的是原始的增量序列,即每次减半,但现代实现通常采用更复杂的增量序列,如Hibbard序列、Sedgewick序列或Stooge序列等,这些序列旨在更好地减少元素交换的次数,提高排序效率。 Java代码实现希尔...

    常用排序算法介绍_示例程序|排序算法_程序.rar

    14. **Stooge Sort( stoogesort)**:虽然效率低,但在特定情况下有较好的表现,主要用于教学目的。 15. **Bogosort**:随机调整数组顺序,直到得到一个有序数组,是一种极其低效的算法,通常用于幽默和教学。 ...

    升压排序.zip

    升压排序,也被称为“Stooge Sort”,是一种不太实用但有趣的排序算法,它是由三个在舞台上表演的小丑(Stooges)启发而来的,因此得名。这个算法主要用作教学示例,帮助理解排序算法的工作原理,而不是为了在实际...

    排序算法-基于C语言实现的排序算法之BogoSort实现.zip

    BogoSort,也被称为BozoSort或StoogeSort,是一种极其低效的排序算法,其主要思想是不断随机打乱数组,直到数组变得有序为止。由于这个过程完全依赖于随机性,BogoSort的平均和最坏时间复杂度都是O(n!),在实际应用...

    排序算法-基于Java实现的排序算法之BogoSort实现.zip

    BogoSort,又称为BozoSort或StoogeSort,是一种非常慢的排序算法,它的基本思想是不断地随机打乱数组,直到数组变得有序为止。这个名字来源于“bozo”,意为傻瓜,暗示了其低效性。BogoSort的平均和最坏情况时间...

    stooge_sort.zip_数据结构_Visual_C++_

    【标题】"stooge_sort.zip_数据结构_Visual_C++_" 涉及到的知识点主要集中在数据结构和排序算法上,特别是 Stooge Sort( stooge_sort )这一特殊的排序算法,以及如何使用 Visual C++ 进行编程实现。 Stooge Sort...

    sort_utils.zip

    10. 帕斯卡三角排序(Stooge Sort):一种效率较低的排序算法,主要用于教学目的,其复杂度比冒泡排序还高。 在学习这些排序算法的C++实现时,除了理解基本思路,还需要关注如何有效地管理内存、避免不必要的交换...

    算法设计与分析-课后习题集答案.doc

    StoogeSort 算法是一种递归排序算法,用于对数据进行排序。例如,在问题 12 中,使用了 StoogeSort 算法来对数据进行排序。StoogeSort 算法的时间复杂度为 O(n^2.7095)。 8. 时间复杂度分析 时间复杂度分析是算法...

    算法设计与分析C++语言描述(陈慧南版)课后答案

    冒泡排序、堆排序、快速排序是算法设计中的三个重要排序算法。例如,在第十三章中,证明该算法不如冒泡排序、堆排序、快速排序。 本资源摘要信息涵盖了算法设计与分析的多个方面,是一份非常有价值的参考资源。

    算法设计与分析C++语言描述陈慧南版课后答案.docx

    * 排序算法:了解StoogeSort算法的正确性证明,了解递归排序的方法。 * 时间复杂度分析:了解冒泡排序、堆排序、快速排序的最坏时间复杂度,比较不同排序算法的时间复杂度。 第十三章 * 选取算法:了解select算法...

    算法分析与设计陈慧南课后答案

    冒泡排序、堆排序和快速排序是算法分析中的三个经典排序算法。在给定的部分内容中,讨论了这三个算法,并分析了其时间复杂度。例如,第十三章 13 中讨论了这三个算法,并分析了其时间复杂度。 本资源摘要信息总结了...

    sort-.rar_数据结构_Visual_C++_

    14. **Stooge Sort**:一种非常慢的排序算法,用于教学目的,时间复杂度为O(n^(log3/2))。 在Visual C++环境下,你可以通过编写这些排序算法的C++实现,理解其工作原理,并通过图形用户界面选择不同的算法,观察其...

    Sound of Sorting-数据集

    1. **Stooge Sort**:这是一种非常有趣但效率较低的排序算法,由三个“傻瓜”操作构成,其最坏情况下的时间复杂度为O(n^log3/2),在实际应用中并不常用,但对理解和比较各种排序算法有教育意义。 2. **Bubble Sort*...

    算法设计与分析C++语言描述(陈慧南版)课后答案.docx

    - **时间复杂度**:最坏情况下,Stooge Sort的时间复杂度明显高于常见的排序算法如冒泡排序、堆排序和快速排序。 - **适用场景**:由于其较高的时间复杂度,Stooge Sort算法在实际应用中较少见。 ### 总结 通过...

    RMQ_jim.rar_RMQ

    在笛卡尔树中,数组元素按照某种排序规则(如逆序)连接成链,再通过旋转操作得到一棵树,使得对于任意子序列,其对应的子树的最小元素是子序列的最小元素。这样,我们就可以在O(1)时间内找到任何区间的最小值。 ...

Global site tag (gtag.js) - Google Analytics