冒泡排序

转载请注明出处。

假设升序排列n个元素。

1、比较相邻的元素。如果前一个比后一个大,交换。若小于或等于,则不改变顺序,所以冒泡排序是稳定的。

2、对每一对相邻元素做同样的工作。遍历完一次后,最后的元素会是最大的数。

3、第二次对前n-1个元素重复上述操作。最后一个元素是最大的,不用管。

4、如此重复n-1次,最后一次比较前两个元素。

时间复杂度:

历次遍历依次需要比较n-1次,n-2次,n-3次,。。。,2次,1次。总共需要比较 n(n-1)/2 次。

时间复杂度为O(n^{_{2}})。

测试代码:

#include<iostream>
#include<iterator>
using namespace std;

void bubbleSort(int list[], int length){ //ascend
	int temp;
	for(int j=1; j<length; j++){
		for(int i = 0; i<length - j; i++){
			if(list[i] > list[i+1]){	//swap
				temp = list[i];
				list[i] = list[i+1];
				list[i+1] = temp;
			}
		}
	}
}
int main(){
	ostream_iterator<int> screen(cout);
	int list[] = {9, 8, 7, 6, 5, 4};
	bubbleSort(list, sizeof(list)/sizeof(int));
	copy(list, list+sizeof(list)/sizeof(int), screen);
	return 0;
}

参考资料:

百度百科,https://baike.baidu.com/item/冒泡排序/4602306?fr=aladdin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值