基本排序算法及分析(二):冒泡排序
冒泡排序和改进的冒泡排序
1
/*-------------------------------------------------------------------------------------------
2
Bubble_sort.h
3
冒泡排序: 时间复杂度为O(N^2)
4
改进的冒泡排序: 时间复杂度仍为O(N^2)
5
一般的冒泡排序方法有可能会在已经排好序的情况下继续比较,改进的冒泡排序
6
设置了一个哨兵flag,如果一次for循环没有进行交换,则元素已经排好序,由哨兵控制退出循环。
7
-------------------------------------------------------------------------------------------*/
8
#ifndef BUBBLE_SORT_H
9
#define BUBBLE_SORT_H
10![](//www.cppblog.com/Images/OutliningIndicators/None.gif)
11
#include "typedef.h"
12
#include "swap.h"
13![](//www.cppblog.com/Images/OutliningIndicators/None.gif)
14
//冒泡排序
15
void Bubble_sort(T *a, int n)
16
{
17
for(int i=n-1; i != 0; --i)
18
for(int j=0; j != i; ++j)
19
if(a[j+1] < a[j]) swap(a[j+1],a[j]);
20
}
21![](//www.cppblog.com/Images/OutliningIndicators/None.gif)
22
//改进的冒泡排序
23
void Improved_Bubble_sort(T *a, int n)
24
{
25
for(int i=n-1; i != 0; --i)
26
{
27
bool flag = true;
28
for(int j=0; j != i; ++j) //这一趟遍历如果没有交换,则已完成排序
29
if(a[j+1] < a[j]) { swap(a[j+1],a[j]); flag = false; }
30
if(flag == true) break;
31
}
32
}
33![](//www.cppblog.com/Images/OutliningIndicators/None.gif)
34
#endif
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
3
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
4
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
5
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
6
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
7
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
9
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
10
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
11
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
12
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
13
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
14
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
15
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
16
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
17
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
18
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
19
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
20
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
21
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
22
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
23
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
24
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
25
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
26
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
27
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
28
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
29
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
31
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
32
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
33
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
34
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
转载请注明出处: http://www.cnblogs.com/liyuxia713/