假设数据 由小到大 排列
所谓“冒泡”指的就是每层循环保证最小的泡泡上浮到水面
考虑数列[3 2 5 1 6]
第一次循环 (从水底开始)
① 3 2 5 1 6 --> 3 2 5 1 6
② 3 2 5 1 6 --> 3 2 1 5 6
③ 3 2 1 5 6 --> 3 1 2 5 6
④ 3 1 2 5 6 --> 1 3 2 5 6
第一次循环完毕之后保证了最小的泡泡(元素)上浮到水面(最顶端)
第二次循环 (从水底开始)
1 3 2 5 6 --> 1 3 2 5 6
1 3 2 5 6 --> 1 3 2 5 6
1 3 2 5 6 --> 1 2 3 5 6
第二次循环,保证余下泡泡中次小的上浮到最小泡泡的后面
注意,第二次比第一次少比较一次,因为第一次已经保证开头的是最小的
第三次循环
。。。
template < class Key >
void BubbleSort ( Key L[ ] , int n ){
int i , j ;
for ( i = 1 ; i < n ; i + + ){
for ( j = n ; j > i ; j - - )
if ( L[j] < L[j-1] ) Swap( L[j] , L[j-1] ) ;
}
return ;
}