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

评论