蛮力法冒泡排序

Posted 望北i

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蛮力法冒泡排序相关的知识,希望对你有一定的参考价值。

蛮力法冒泡排序

蛮力法在冒泡排序上,比较数组中相邻元素,如果它们是逆序的话,就交换它们的位置。重复多次以后,最终最大的元素就沉到数组最后一个位置,第二遍将第二大的元素沉下去。一直这样做,直到 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)

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

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

以上是关于蛮力法冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

算法笔记_008:选择排序和冒泡排序蛮力法

排序算法1——冒泡排序

算法——蛮力法之顺序查找和蛮力字符串匹配

3.1.1蛮力法之选择排序

tmp

Java每日一题——>739. 每日温度(蛮力法,栈方法)