Stooge排序是一种低效的递归排序算法,甚至慢于冒泡排序。在《算法导论》第二版第7章(快速排序)的思考题中被提到,是由Howard、Fine等教授提出的所谓“漂亮的”排序算法。
实现
- 如果最后一个值小于第一个值,则交换它们
- 如果当前子集元素数量大于等于3:
- 使用Stooge排序前2/3的元素
- 使用Stooge排序后2/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方法排序,简单演示。
python 排序算法之StoogeSort
最初的希尔排序使用的是原始的增量序列,即每次减半,但现代实现通常采用更复杂的增量序列,如Hibbard序列、Sedgewick序列或Stooge序列等,这些序列旨在更好地减少元素交换的次数,提高排序效率。 Java代码实现希尔...
14. **Stooge Sort( stoogesort)**:虽然效率低,但在特定情况下有较好的表现,主要用于教学目的。 15. **Bogosort**:随机调整数组顺序,直到得到一个有序数组,是一种极其低效的算法,通常用于幽默和教学。 ...
升压排序,也被称为“Stooge Sort”,是一种不太实用但有趣的排序算法,它是由三个在舞台上表演的小丑(Stooges)启发而来的,因此得名。这个算法主要用作教学示例,帮助理解排序算法的工作原理,而不是为了在实际...
BogoSort,也被称为BozoSort或StoogeSort,是一种极其低效的排序算法,其主要思想是不断随机打乱数组,直到数组变得有序为止。由于这个过程完全依赖于随机性,BogoSort的平均和最坏时间复杂度都是O(n!),在实际应用...
BogoSort,又称为BozoSort或StoogeSort,是一种非常慢的排序算法,它的基本思想是不断地随机打乱数组,直到数组变得有序为止。这个名字来源于“bozo”,意为傻瓜,暗示了其低效性。BogoSort的平均和最坏情况时间...
【标题】"stooge_sort.zip_数据结构_Visual_C++_" 涉及到的知识点主要集中在数据结构和排序算法上,特别是 Stooge Sort( stooge_sort )这一特殊的排序算法,以及如何使用 Visual C++ 进行编程实现。 Stooge Sort...
10. 帕斯卡三角排序(Stooge Sort):一种效率较低的排序算法,主要用于教学目的,其复杂度比冒泡排序还高。 在学习这些排序算法的C++实现时,除了理解基本思路,还需要关注如何有效地管理内存、避免不必要的交换...
StoogeSort 算法是一种递归排序算法,用于对数据进行排序。例如,在问题 12 中,使用了 StoogeSort 算法来对数据进行排序。StoogeSort 算法的时间复杂度为 O(n^2.7095)。 8. 时间复杂度分析 时间复杂度分析是算法...
冒泡排序、堆排序、快速排序是算法设计中的三个重要排序算法。例如,在第十三章中,证明该算法不如冒泡排序、堆排序、快速排序。 本资源摘要信息涵盖了算法设计与分析的多个方面,是一份非常有价值的参考资源。
* 排序算法:了解StoogeSort算法的正确性证明,了解递归排序的方法。 * 时间复杂度分析:了解冒泡排序、堆排序、快速排序的最坏时间复杂度,比较不同排序算法的时间复杂度。 第十三章 * 选取算法:了解select算法...
冒泡排序、堆排序和快速排序是算法分析中的三个经典排序算法。在给定的部分内容中,讨论了这三个算法,并分析了其时间复杂度。例如,第十三章 13 中讨论了这三个算法,并分析了其时间复杂度。 本资源摘要信息总结了...
14. **Stooge Sort**:一种非常慢的排序算法,用于教学目的,时间复杂度为O(n^(log3/2))。 在Visual C++环境下,你可以通过编写这些排序算法的C++实现,理解其工作原理,并通过图形用户界面选择不同的算法,观察其...
1. **Stooge Sort**:这是一种非常有趣但效率较低的排序算法,由三个“傻瓜”操作构成,其最坏情况下的时间复杂度为O(n^log3/2),在实际应用中并不常用,但对理解和比较各种排序算法有教育意义。 2. **Bubble Sort*...
- **时间复杂度**:最坏情况下,Stooge Sort的时间复杂度明显高于常见的排序算法如冒泡排序、堆排序和快速排序。 - **适用场景**:由于其较高的时间复杂度,Stooge Sort算法在实际应用中较少见。 ### 总结 通过...
在笛卡尔树中,数组元素按照某种排序规则(如逆序)连接成链,再通过旋转操作得到一棵树,使得对于任意子序列,其对应的子树的最小元素是子序列的最小元素。这样,我们就可以在O(1)时间内找到任何区间的最小值。 ...