您的位置:首页 > 其它

冒泡排序

2013-06-08 16:33 113 查看
1 排序思想:

依次比较相邻的两个元素,若逆序,则交换位置。直到没有反序的记录。

第1趟:依次比较并交换R1与R2、R2与R3、……、R(n-1)与R(n),这次排序之后,第n个记录就是最终记录;
第2趟:对前(n-1)个记录进行上述操作,则第(n-1)个记录就在其最终位置;
然后依次对前(n-2)、前(n-3)、……、前2个记录进行上述操作。共需(n-1)趟排序。
如果某一趟没有进行交换记录,则说明已经完成排序,应当停止排序。

冒泡排序每趟排序操作都可以将一个元素放到最终位置。

2 算法实现:

// 冒泡排序
void bubble_sort(int num[], int len){
int i,j,tmp;
bool flag;
// 共需进行len-1趟排序
for(j=0;j<len-1;j++){
flag=true;
// 每趟排序对前len-j个元素进行处理
for(i=0;i<len-j-1;i++){
if(num[i]>num[i+1]){
tmp=num[i];
num[i]=num[i+1];
num[i+1]=tmp;
flag=false;
}
}
// 如果flag等于true,表示这一趟没有进行交换
// 即前len-j个元素是有序的,可以停止比较
if(flag)
break;
}
}

3 性能分析:

3.1 空间复杂度:如上代码,使用了一个辅助单元tmp,空间复杂度为O(1)

3.2 时间复杂度:

3.2.1 最好情况:待排序记录已经是有序的,则只要进行一趟排序,关键字比较(n-1)次,记录移动0次。

时间复杂度O(n)

3.2.2 最坏情况:待排序记录已经是逆序的,则一趟排序,关键字比较次数(n-i-1)次,记录移动3(n-i-1)次。整个过程

比较次数为

    


记录移动次数为

    


时间复杂度O(n^2)

3.2.3 平均时间复杂度:O(n^2)

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