排序算法有很多种,每一种在不同的情况下都占有一席之地。关于排序算法我分“经典排序之”系列分别述之。本篇为冒泡排序。

冒泡排序是最古老的排序,我们最早开始学的排序算法:

冒泡排序总共有三种不同的形式,对应三种不同的排序算法。(C++语言)

 转载引用请注明出处:http://www.cnblogs.com/bakari/archive/2012/08/11/2633672.html 谢谢!

先看类的描述:

经典排序之 冒泡排序_经典

 1 /************************************************ 2  *  Author: bakari Date: 2012.7.30 3  *  三种冒泡排序 4  *  第一种:将最小的元素冒泡到最前面 5  *  第二种:将最大的元素冒泡到最后面 6  *  第三种:双向冒泡 7  ************************************************/   8 class BubbleSort 9 {10     int len;11     vector<int> BubbleList;12 public:13     BubbleSort(vector<int>,int);14     void Bubble_Sort1();15     void Bubble_Sort2();16     void Bubble_Sort3();17     void Swap(int,int);18     void Print();19 };

经典排序之 冒泡排序_经典

 

1、将小元素冒泡到最前面,首先操作的是小元素。

经典排序之 冒泡排序_经典

 1 // 第一种 2 void BubbleSort::Bubble_Sort1() 3 { 4     for (int i = 0; i != len - 1; ++i) 5     { 6         for (int j = i + 1; j != len; ++j) 7         { 8             if (BubbleList[j] < BubbleList[i]) 9                 Swap(i,j);10         }11     }12 }

经典排序之 冒泡排序_经典

 

2、将最大的元素冒泡到最后面

经典排序之 冒泡排序_经典

 1 //第二种 2 void BubbleSort::Bubble_Sort2() 3 { 4     for (int i = 0; i != len; ++i)  //注意和上面的算法对照此循环 5     { 6         for (int j = 0; j != len - 1 - i; ++j) //j只能到len - 1; 7         { 8             if(BubbleList[j + 1] <BubbleList[j]) 9                 Swap(j + 1,j);10         }11     }

经典排序之 冒泡排序_经典

 

3、双向冒泡

怎么个双向法请看代码:

经典排序之 冒泡排序_经典

 1 //第三种 2 void BubbleSort::Bubble_Sort3() 3 { 4     int left = 0; 5     int right = len - 1; 6     int i; 7     while (left < right) 8     { 9         for (i = left;i != right; ++i)            //从左到右冒泡10         {11             if (BubbleList[i + 1] < BubbleList[i])12                 Swap(i + 1,i);                    //交换13         }14         right = i - 1;15         for (i = right;i != left; --i)             //从右到左冒泡16         {17             if (BubbleList[i - 1] > BubbleList[i])18                 Swap(i - 1,i);19         }20         left = i + 1;21     }22 }

经典排序之 冒泡排序_经典