数据结构与算法 —— 冒泡排序

冒泡排序

一、概念

基础概念:每次都把当前元素与下一元素作比较,如果当前元素比下一元素的值大(小)的话,就交换它们的位置,一直循环重复,直到数组有序。 这个过程中,越大(小)的数,就会越早到达数组的最末尾,并保持不动。 然后是第二大的数…第三大的数…过程就像气泡往上冒一样。

二、代码及过程

#include <stdio.h>

void foo(int *a, int n){
	int temp,i,j;
	for(i = 0; i < n ; i++){
		printf("\n第%d趟排序:",i+1);
		/** 这里n-i-1是因为,每经过一次遍历,最末尾就能确定一个当前剩余元素中的“最大值”
			这个最大值在下次遍历中,无需再次进行比较 **/
		for(j = 0; j < n-i-1; j++){
			if(a[j] > a[j+1]){	// 当前元素大于下一元素,交换位置
				temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
			printf("%3d",a[j]);
		}
	}

	// 输出最后排序好的数组
	for(i = 0; i < n ; i++){
		printf("%3d",a[i]);
	}
}

void main(){
	int a[] = {5,10,3,1,6,12,2};
	int n = sizeof(a) / sizeof(a[0]);
	foo(a,n);
	printf("\n");
}

三、复杂度

时间复杂度: O(n²)
空间复杂度: O(1)

四、四种排序算法的复杂度

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43725997/article/details/89220498