一种极为有趣算法 摇头丸排序法

yanglilibaobao 2007-04-17 10:31:48
普通的冒泡排序法,在一次循环中,只把最小的元素排到数组的顶部,而摇头丸排序法则在一次循环中,把最小元素排到顶部,并把最大的元素排到底部.下面是实现代码:
#include <iostream>

using namespace std;

template <class T>
void Swap( T &t1, T &t2 )
{
T temp;
temp = t1;
t1 = t2;
t2 = temp;
}

int iArray[10] = { 8, 4, 3, 6, 2, 9, 1, 7, 0, 5 };

void Display( int a[], int iSize )
{
for ( int i = 0; i < iSize; ++i )
cout << a[i];
cout << endl;
}

void Sort( int a[], int iSize )
{
int i,j;
int temp = 0;
int iIndexMax;

for ( i = 0; i < iSize; ++i )
{
iIndexMax = iSize - i - 1;

for ( j = iSize - i - 1; j > i; --j )
{
if ( a[j] < a[j-1] ) //把最小元素排到顶部
Swap( a[j], a[j-1] );
if ( a[j] > a[iIndexMax] ) //把最大元素排到底部
iIndexMax = j;
}
Swap( a[iSize - i - 1], a[iIndexMax] );
Display( a, iSize );
}
}



int main()
{
Display( iArray, 10 );
Sort( iArray, 10 );
Display( iArray, 10 );
return 0;
}


整个算法,就像把最小元素和最大元素摇到数组的两头

可是它的时间代价为多少呢,它是否比冒泡排序法更快呢?


转http://bbs.csai.cn/
...全文
637 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yelling 2007-05-10
  • 打赏
  • 举报
回复
如果写的好的话未必会比单向慢,
怎么样才能写的好,就是要让一次比较的运算结果尽可能被更多的利用。

LZ的写的不是很好

总的来说复杂度还在一个等级。
yelling 2007-05-10
  • 打赏
  • 举报
回复
如果写的好的话未必会单向慢,
怎么样才能写的好,就是要让一次比较的运算结果尽可能被更多的利用。

LZ的写的不是很好

总的来说复杂度还在一个等级。
chengxuzhu 2007-05-09
  • 打赏
  • 举报
回复
N square.
eggqq007 2007-05-09
  • 打赏
  • 举报
回复
双向冒泡,速度更慢
zzwu 2007-05-09
  • 打赏
  • 举报
回复
有趣,有趣
Jack_xiao 2007-05-09
  • 打赏
  • 举报
回复
学习
lw2000_81 2007-05-09
  • 打赏
  • 举报
回复
我只能说名字起的有趣。
beyondyf 2007-04-20
  • 打赏
  • 举报
回复
呵呵,这个算法和冒泡法没什么区别,空间复杂度和时间复杂度都没变。放弃吧
haitao8686 2007-04-19
  • 打赏
  • 举报
回复
冒泡更好
AFIC 2007-04-18
  • 打赏
  • 举报
回复
仅仅是有趣而已
njwangchuan 2007-04-18
  • 打赏
  • 举报
回复
显然性能还不如单纯冒泡
lidongri 2007-04-18
  • 打赏
  • 举报
回复
性能绝对下降了
NowCan 2007-04-18
  • 打赏
  • 举报
回复
复杂度一样。双向冒泡。
GetTheWorld 2007-04-17
  • 打赏
  • 举报
回复
还是O(n^2)
zhouzidane46 2007-04-17
  • 打赏
  • 举报
回复
有可能更快哦
呵呵
Jerry3385 2007-04-17
  • 打赏
  • 举报
回复
复杂度一样的 也许性能还略有下降

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧