Author: bakari Date: 2012.7.30
排序算法有很多种,每一种在不同的情况下都占有一席之地。关于排序算法我分“经典排序之”系列分别述之。本篇为冒泡排序。
冒泡排序是最古老的排序,我们最早开始学的排序算法:
冒泡排序总共有三种不同的形式,对应三种不同的排序算法。(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 }