码迷,mamicode.com
首页 > 编程语言 > 详细

冒泡排序及改进

时间:2015-06-04 19:18:29      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

#include <iostream>
#define N 10
using namespace std;
void swap(int &a,int &b)
{
//   a = a + b;
//   b = a - b;
//   a = a - b;
     a ^= b;
     b ^= a;
     a ^= b;
}
void BubbleSort1(int *a)
{
   int i,j;
   for(i = 0;i < N-1;i++)
   {
      for(j = i+1;j < N;j++)
      {
         if(a[i] >= a[j])
         {
            swap(a[i],a[j]);
         }
      }
   }
   for(i = 0;i < N;i++)
   {
      cout << a[i] << " ";
   }
   cout << endl;
}

void BubbleSort2(int *a)
{
   for(int i = 0;i < N;i++)
   {
      for(int j = N-2;j >= i;j--)
      {
         if(a[j] > a[j+1])
         {
            swap(a[j],a[j+1]);
         }
      }
   }
   for(int i = 0;i < N;i++)
   {
      cout << a[i] << " ";
   }
   cout << endl;
}

void BubbleSort3(int *a)
{
   bool flag = 1;
   for(int i = 0;i < N-1 && flag; i++)
   {
      bool flag = 0;
      for(int j = N-2;j >= i;j--)
      {
         if(a[j] > a[j+1])
         {
            flag = 1;
            swap(a[j],a[j+1]);
         }
      }
   }
   for(int i = 0;i < N;i++)
   {
      cout << a[i] << " ";
   }
   cout << endl;
}

int main()
{
   int a[N] = {2,1,5,3,4,10,6,9,8,7};
   BubbleSort1(a);
   BubbleSort2(a);
   BubbleSort3(a);
   return 0;
}

  冒泡排序的复杂度分析:

    最好的情况,也就是要排序的表本身是有序的,那么我们比较次数,根据最后改进的代码,可以判断出也就是 n-1 次的比较,没有数据交换,时间复杂度为O[n];

    最坏需要的情况,即待排序的表是逆序的情况,此时需要比较n(n + 1)/2次,因此总的时间复杂度为O[n^2].

冒泡排序及改进

标签:

原文地址:http://www.cnblogs.com/devinblog/p/4552457.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!