冒泡法:我觉得重点在于两两比较相邻记录的关键字。
冒泡法的定义:两两比较相邻记录的关键字,如果反序,就交换,直到没有反序为止。
时间复杂度:最好的情况下,也就是表就是顺序的,也就是只要比较n-1次,O(n);
最坏的情况下,刚好逆序,也就是要比较(n-1)+(n-2)+...+1=n(n-1)/2,为O(n2)。因此总的时间复杂度为O(n2)。
#include<iostream>
using namespace std;
#define M 10
void swap(int *a, int m, int n)
{
int temp;
temp = a[m];
a[m] = a[n];
a[n] = temp;
}
void Bubblesort(int *a,int length)
{
int i,j;
for(i=0;i<length-1;i++)
{
for(j=length-2;j>=i;j--)
{
if(a[j]>a[j+1])
{
swap(a,j,j+1);
}
}
}
}
void Bubblesort2(int *a,int length)
{
int i,j;
typedef int status;
status flag = true;
for(i=0;(i<length-1)&&flag;i++)
{ flag = false;
for(j=length-2;j>=i;j--)
{
if(a[j]>a[j+1])
{
swap(a,j,j+1);
flag = true;
}
}
}
}
int main()
{
int r[M];
for(int i=0;i<M;i++)
{
r[i] = rand() % M;
}
for(int i=0;i<M;i++)
{
cout<<r[i]<<'\t';
}
cout<<endl;
Bubblesort2(r,M);
for(int i=0;i<M;i++)
{
cout<<r[i]<<'\t';
}
return 0;
}