Stooge 排序
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=; 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) ,可见此算法效率相当的低下,比选择、插入、冒泡排序更差
Stooge 排序的更多相关文章
- Stooge排序与Bogo排序算法
本文地址:http://www.cnblogs.com/archimedes/p/stooge-bogo-sort-algorithm.html,转载请注明源地址. Stooge排序算法 Stooge ...
- Stooge排序
又叫臭皮匠排序... 在<算法导论>作为反例出现的漂亮但极其低效的排序算法. 基本思路是:只要数组长度大于3,先将头与尾排序,然后递归调用排序前三分之二,再递归调用排序后三分之二,最后再递 ...
- Hark的数据结构与算法练习之臭皮匠排序
算法说明 个人感觉是没有意义的算法,只是用来作为学术研究.或者说开拓一下思维. 从wikipedia copy来的一句解释的话:Stooge排序是一种低效的递归排序算法,甚至慢于冒泡排序.在<算 ...
- 部分博文目录索引(C语言+算法)
今天将本博客的部分文章建立一个索引,方便大家进行阅读,当然每一类别中的文章都会持续的添加和更新(PS:博文主要使用C语言) 博客地址:http://www.cnblogs.com/archimedes ...
- “漂亮的”排序算法 Stooge Sort 如何完成排序
Stooge Sort 是一种低效的递归排序算法,甚至慢于冒泡排序.在<算法导论>第二版第7章(快速排序)的思考题中被提到,是由Howard.Fine等教授提出的所谓“漂亮的”排序算法. ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- iOS可视化动态绘制八种排序过程
前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...
- JavaScript实现常用的排序算法
▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...
- [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html 目录 马桶排序(令人 ...
随机推荐
- hive cst 时间转换
select from_unixtime(unix_timestamp(r.collecttime,'EEE MMM dd HH:mm:ss zzz yyyy'),'yyyy-MM-dd HH:mm: ...
- 在IE和Firefox中实现Flash透明背景
要在一个静态的背景上加一个透明的Flash会显示动态的效果,按照常规方式加了代码后,在IE中能显示透明背景Flash,但是用Firefox浏览器却发现没有透明的效果,那究竟应该怎么加呢?于是搜索和研究 ...
- Oracle 初始化参数 二三事,随记
(1) alter system set log_archive_dest_n='location=d:\一个存在的目录'; ---- 预期 但是如果“d:\一个存在的目录”不是一个有效的目录,则“ ...
- 解决parseSdkContent failed java.lang.NullPointerException错误
今天我的eclipse崩溃了,报“parseSdkContent failed java.lang.NullPointerException”的错误. 所有的安卓项目都不正常,创建项目就会报 java ...
- [OpenCV] Samples 03: kmeans
注意Mat作为kmeans的参数的含义. 扩展:高维向量的聚类. 一.像素聚类 #include "opencv2/highgui.hpp" #include "open ...
- AngularJS------命令行
如下:(‘$’符号不需要输入哦) $ ng build --发布项目
- gem install cocoapods ERROR: While executing gem ... (Gem::FilePermissionError)
在cocoapods 执行 sudo gem install cocoapods 的时候出现 While executing gem ... (Gem::FilePermissionError) ...
- lua 注释
1. 单行注释 -- 功能等同于C++中的// 2. 多行注释 --[[ 注释的内容 ]] 功能等同于C++中的 /**/ 3. 多行注释 --[====[ 注释和内容 ]=== ...
- iOS .tdb代替.dylib
原文链接:http://www.meniny.cn/2015/09/22/00-00-01-iOS_Xcode_7_tbd/ 不少升级 Xcode 7 的小伙伴们都表示在引入动态库时惊呆了,因为熟悉的 ...
- Echarts调整图表上下左右的间距,Echarts调整柱状图左右的间距
Echarts调整图表上下左右的间距,Echarts调整柱状图左右的间距 >>>>>>>>>>>>>>>> ...