您的位置:首页 > 理论基础 > 数据结构算法

数据结构--冒泡排序

2016-12-19 22:20 204 查看
起泡排序的过程很简单。

首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换之,然后比较第二个记录和第三个记录的关键字。依次类推,直至第n-1个记录和第n个记录的关键字进行比较为止。

上述过程称作第一趟起泡排序,其结果使得关键字最大的记录被安置到最后一个记录的位置上。然后进行第二趟起泡排序,对前n-1个记录进行同样操作,其结果是使关键字次大的记录被安置到第n-1个记录的位置上。

一般地,第i趟起泡排序是从r[1]到r[n-i+1]依次比较相邻两个记录的关键字,并在逆序时交换相邻记录,其结果是这n-i+1个记录中关键字最大的记录被交换到第n-i+1的位置上。

整个排序过程需进行k(1<=k< n)趟起泡排序。

显然,判别起泡排序结束的条件应该是“在一趟排序过程中没有进行过交换记录的操作”。我们将通过设立一个bool类型变量来判断结束条件。

其算法如下

void BubbleSort(int r[],int size)
{
int i,j,temp;
bool exchange;  //交换标志
for(i=0;i<size;i++)
{
exchange=false; //本趟排序开始前,交换标志设为假
for(j=size-1;j>=i;--j)
if(r[j+1]<r[j])
{
temp=r[j+1];    //暂存单元
r[j+1]=r[j];
r[j]=temp;
exchange=true;  //发生了交换,故将交换标志置为真
}
if(!exchange)   //本趟没有发生交换,提前终止算法
return ;
}
}


(1)冒泡排序的最好时间复杂度O(n)

(2)冒泡排序的最坏时间复杂度为O(n^2)

(3)冒泡排序的平均时间复杂度为O(n^2)

(4)算法稳定性:稳定的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: