Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1658054
  • 博文数量: 695
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4027
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-20 21:22
文章分类

全部博文(695)

文章存档

2018年(18)

2017年(74)

2016年(170)

2015年(102)

2014年(276)

2013年(55)

分类: C/C++

2014-03-31 15:49:24

时间复杂度O(n^2)

基本思想:

    对待排序的序列进行依次比较相邻的两个对象,并且把大的对象放在后面,小的对象放在前面。每一轮排序结果都会使待排序的序列中最大值有序;算法直到序列有序后结束。整个排序的过程可以使用二次循环实现。 

实现代码:

点击(此处)折叠或打开

  1. template < class T >
  2.  void BubbleSort(T * aList, size_t size)
  3.  {
  4.      unsigned int i, j;
  5.      T temp;
  6.      for (i = 0 ; i < size; ++ i)
  7.     {
  8.         for (j = 0 ; j < size - i - 1 ; ++ j)
  9.         {
  10.             if (aList[j] > aList[j + 1 ])
  11.             {
  12.                 temp = aList[j + 1 ];
  13.                 aList[j + 1 ] = aList[j];
  14.                 aList[j] = temp;
  15.             }
  16.         }
  17.     }
  18. }

  

此算法是最基本的冒泡排序,未加任何优化

以下版本添加了优化条件判断,效率会高一点

  

点击(此处)折叠或打开

  1. template < class T >
  2. void BubbleSort(T * aList, size_t size)
  3. {
  4.     unsigned int i, j;
  5.     T temp; bool isSorted;
  6.     for (i = 0 ; i < size; ++ i)
  7.     {
  8.         isSorted = true ;
  9.         for (j = 0 ; j < size - i - 1 ; ++ j)
  10.          {
  11.             if (aList[j] > aList[j + 1 ])
  12.             {
  13.                 isSorted = false ;
  14.                 temp = aList[j + 1 ];
  15.                 aList[j + 1 ] = aList[j];
  16.                 aList[j] = temp;
  17.             }
  18.          }
  19.         if (isSorted)
  20.         {
  21.              break ;
  22.          }
  23.      }


 
阅读(926) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~