冒泡排序
Posted gunduzi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序相关的知识,希望对你有一定的参考价值。
概述
最近在面试,发现基本上上点规模的公司都喜欢问算法的问题,但是在我实际的工作中使用这些算法的地方非常少,感觉就偶尔用一下递归,而且递归也不是什么算法,其他的很多算法很少使用,但是既然人家问了,那也没办法,说不定是因为人家的公司确实高大上,工作中很多的场景可以使用这些算法,本文介绍冒泡排序,一种很简单的排序算法,下一篇会介绍快速排序
核心思想
什么是冒泡,就是在水中一个气泡,一点一点的上升到水面,那这个算法其实也是这样做的,就是比较相邻的元素,从头比较到尾,那就可以找到一个最大或者最小的元素,然后再从头找,找到次大或者次小的,以此类推。
举例如下:
3,5,4,2
要求:使用冒泡排序从小到大排序
第一轮:
比较3和5,5>3,不用交换,结果为:3,5,4,2
比较5和4,发现4<5,交换5和4的位置,结果为:3,4,5,2
比较2和5,发现2<5,交换2和5的位置,结果为:3,4,2,5
经过第一轮的排序,大家可以发现,最大的元素5已经跑到他应该呆的位置了
第二轮:
比较3和4,4>3,不用交换,结果为:3,4,2,5
比较4和2,2<4,交换位置,结果为:3,2,4,5
经过第二轮,发现4已经跑到他应该呆的位置了
第三轮:
比价3和2,发现2<3,交换位置,结果为:2,3,4,5
总结:经过上面的过程,大家应该清楚什么是冒泡排序了,思想很简单,就是交换相邻的元素,一直遍历,时间复杂度为O(n2),时间复杂度太高,除了名字好听之外,基本没啥用
代码实现
本文使用java实现,如果你熟悉C或者python,也可以凑合看,语法差不太多
/** * @author: steve * @date: 2020/7/6 13:58 * @description: 冒泡排序 */ public class BubbleSort { public static int array[] = {72,6,57,88,60,42,83,73,48,8}; public static void bubbleSort(){ for (int i = 0; i < array.length; i++) { for (int j = 0; j < array.length -1 - i; j++) { if (array[j] > array[j+1]){ swap(j,j+1); } } } for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } } public static void swap(int i, int j){ int temp = 0; temp = array[i]; array[i] = array[j]; array[j] = temp; } public static void main(String[] args) { bubbleSort(); } }
以上是关于冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章