蛮力法冒泡排序

蛮力法冒泡排序

蛮力法在冒泡排序上,比较数组中相邻元素,如果它们是逆序的话,就交换它们的位置。重复多次以后,最终最大的元素就沉到数组最后一个位置,第二遍将第二大的元素沉下去。一直这样做,直到 n - 1 遍以后,该数组就排好序了。
第 i (0 <= i <= n - 2) 遍冒泡排序可以用
A[0] , A[j] , A[j], … , A[n - i - 1] | A[n - i] <= … A[n - 1];

算法 BubbleSort(A [ n] )
//该算法用冒泡排序对数组 A[n] 进行排序
//输入:一个可排序的数组 A [n]
//输出:升序排列的数组 A [n]
for i <–0 to do
for j <-- 0 to n - 2 - i do
if A[j + 1] < A[ j ]
swap A[ j ] and A[ j + 1]

核心代码

void BubbleSort(int a[], int n){
	int temp;
	for(int i = 0; i <= n - 2; i++){
		for(int j = 0; j <= n - 2 - i; j++){
			if(a[j + 1] < a[j]){
				temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
}

例如:用蛮力法对序列89,445,68,90,29,34,17做冒泡排序

/*冒泡排序*/
#include<stdio.h>
void BubbleSort(int a[], int n){
	int temp;
	for(int i = 0; i <= n - 2; i++){
		for(int j = 0; j <= n - 2 - i; j++){
			if(a[j + 1] < a[j]){
				temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
	for(int i = 0; i < 7; i++)
		printf("%-3d", a[i]);
}

int main(){
	int a[7] = {89, 45, 68, 90, 29, 34, 81};
	printf("排序前的元素\n"); 
	for(int i = 0; i < 7; i++)
		printf("%-3d", a[i]);
	printf("\n");
	printf("排序后的元素为\n"); 
	BubbleSort(a, 7);
	return 0;
} 

运行结果
在这里插入图片描述
代码分析
时间复杂度分析:对于所有规模为 n 的数组来说,该冒泡排序的键值比较次数都是相同的,C( n ) = O(n2),但它的建的交换次数取决于特定的输入。最坏情况下就是遇到降序排序的数组,这是键的交换次数和键的比较次数是相同的,C( n ) = O( n2), 综上,因此冒泡排序总的时间复杂度为 O( n)

空间复杂度为:O(1)

冒泡排序是稳定排序,不会改变数据的大小的相对位置。

结尾
写博客是为了一是整理所学知识,亲生写代码的经验,而是为了总结经典算法,三是督促自己努力,懂得越多,越知道自己知识的浅薄,四是希望和他人多多交流,有什么不对的地方大佬们多多指点

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望北i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值