#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].
天道酬勤!
浙公网安备 33010602011771号