[Algorithm]冒泡排序

本文是关于本人对冒泡排序的一些理解,如有错误,还望大神指正。

注:本文的排序都是指升序序列。


先来了解一下,冒泡排序是怎么排序的?原理是怎样的?

如下图,将每一个元素都与其后面的元素进行比较,每一轮过后,都将最大的元素放到最右侧,也就是像“冒泡”一样。

在这里插入图片描述

让我们看看每一轮“冒泡”后的结果,见下图。

在这里插入图片描述
冒泡排序算法–Java版

static void sort(int [] arr) {
	int temp;
	//总共比较 n - 1 轮
	for(int i = 0;i<arr.length-1;i++) {   
		//每轮比较 (n - 已确定好元素位置的个数 - 1) 次
		for(int j = 0;j<arr.length-1-i;j++) {
			if(arr[j] > arr[j+1]) {
				temp = arr[j];
				arr[j]=arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
}

这样就可以将所有元素按照大小排好序,非常好。但是仔细想想,这样有什么弊端呢?如果是几个月前刚接触算法的我,回答这个问题,我肯定会说:这样都排好序了,不是挺好的么?

其实冒泡排序的效率是不高的,举个栗子就能明白了。体育课上老师让按大小个排成一队,个子最高的站在了第一个,这时老师说,第一个同学,你跟站在第二个的同学换一下,现在个子最高的站在第二个位置,老师又说 ,你跟第三个同学换一下,再跟第四个同学换一下,一个一个终于换到了队伍最后一排。这才只是第一轮排队,还会有 n-1 轮这样的排队。这时,同学们心里肯定想:这老师是不是有病啊?干嘛不一步到位,直接挑出最矮的放第一个,以此类推不就好了!

这么一理解是不是觉得冒泡排序效率也太低了,那么那种直接挑出最小的元素排好序的算法是什么排序算法呢?请听下回分晓。

猜你喜欢

转载自blog.csdn.net/weixin_42653522/article/details/104118593