冒泡排序的简单实现

  冒泡的意思就是一次循环中依次比较相邻位置的数,满足则交换。

第一个for代表次数,第二个for来真正的两两比较。

 冒泡的关键在于循环条件的次数确定,先看第一个for循环是length-1,

 比如5个数 5 3 1 2 0,那么看第一次比较后变成3 1 2 0 5 第二次变成

 1 20 3 5 第三次变成 1 0 2 3 5 第四次变成 0 1 2 3 5 最后一次不需要比较了,肯定最小

 所以是length-1次了

 然后看第二个循环就是用来俩俩比较的 比如5个数 5 3 1 2 0,有这样的比较(先认为最多需要比较多少次,

 忽略中间遇到的不需要比较的),那么俩俩比较最多需要4次((5,3) (3,1) (1,2) (2,0)先忽略交换哈),第二次循环变成4个数俩俩比较 需要3次,也就是说一个数冒泡上去了,那么我们就不需要理她了,只关心剩下的数的比较即length-1-i。当然写length-1也可以,但是就多了很多没用的循环。

#include <stdio.h>
//=====================
void swap(int &i, int &j) {//交换俩数
	int temp = i;
	i = j;
	j = temp ;
	return ;
}
//======================================
void BubbleSort(int *a, int len ) {
	int i, j;
	for(i = 0; i < len - 1; i++) {
		for(j = 0; j < len -i -1 ; j++) {
			if(a[j] > a[j+1])
				swap(a[j], a[j+1]);
		}//for
	}//for
}//BubbleSort
//=======================================
int main() {
	int array[] = {6,8,3,9,5,0,1,4,2,7};
//	int array1[] = {6,8,3,9,5};
        BubbleSort(array,10);

	for(int i  = 0; i < 10; i++) {
		printf("%d ",array[i]);
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值