Author: bakari Date: 2012.7.30
排序算法有很多种,每一种在不同的情况下都占有一席之地。关于排序算法我分“经典排序之”系列分别述之。本篇为冒泡排序。
冒泡排序是最古老的排序,我们最早开始学的排序算法:
冒泡排序总共有三种不同的形式,对应三种不同的排序算法。(C++语言)
转载引用请注明出处: 谢谢!
先看类的描述:
1 /************************************************ 2 * Author: bakari Date: 2012.7.30 3 * 三种冒泡排序 4 * 第一种:将最小的元素冒泡到最前面 5 * 第二种:将最大的元素冒泡到最后面 6 * 第三种:双向冒泡 7 ************************************************/ 8 class BubbleSort 9 {10 int len;11 vector BubbleList;12 public:13 BubbleSort(vector ,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]
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 }
开了个公众号「aCloudDeveloper」,专注技术干货分享,期待与你相遇。