一种极为有趣算法 摇头丸排序法
普通的冒泡排序法,在一次循环中,只把最小的元素排到数组的顶部,而摇头丸排序法则在一次循环中,把最小元素排到顶部,并把最大的元素排到底部.下面是实现代码:
#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/