基本排序算法及分析(二):冒泡排序

冒泡排序和改进的冒泡排序

 1/*-------------------------------------------------------------------------------------------
 2Bubble_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
11#include "typedef.h"
12#include "swap.h"
13
14//冒泡排序
15void 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
22//改进的冒泡排序
23void 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 == truebreak;
31    }

32}

33
34#endif



幸运草 2009-04-22 16:46 发表评论
posted @ 2009-04-22 16:46  liyuxia713  阅读(193)  评论(0编辑  收藏  举报