本文是关于本人对冒泡排序的一些理解,如有错误,还望大神指正。
注:本文的排序都是指升序序列。
先来了解一下,冒泡排序是怎么排序的?原理是怎样的?
如下图,将每一个元素都与其后面的元素进行比较,每一轮过后,都将最大的元素放到最右侧,也就是像“冒泡”一样。
让我们看看每一轮“冒泡”后的结果,见下图。
冒泡排序算法–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 轮这样的排队。这时,同学们心里肯定想:这老师是不是有病啊?干嘛不一步到位,直接挑出最矮的放第一个,以此类推不就好了!
这么一理解是不是觉得冒泡排序效率也太低了,那么那种直接挑出最小的元素排好序的算法是什么排序算法呢?请听下回分晓。
来源:CSDN
作者:Atikin
链接:https://blog.csdn.net/weixin_42653522/article/details/104118593