冒泡排序

概述

  最近在面试,发现基本上上点规模的公司都喜欢问算法的问题,但是在我实际的工作中使用这些算法的地方非常少,感觉就偶尔用一下递归,而且递归也不是什么算法,其他的很多算法很少使用,但是既然人家问了,那也没办法,说不定是因为人家的公司确实高大上,工作中很多的场景可以使用这些算法,本文介绍冒泡排序,一种很简单的排序算法,下一篇会介绍快速排序

核心思想

  什么是冒泡,就是在水中一个气泡,一点一点的上升到水面,那这个算法其实也是这样做的,就是比较相邻的元素,从头比较到尾,那就可以找到一个最大或者最小的元素,然后再从头找,找到次大或者次小的,以此类推。

举例如下:

  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();
    }

}
原文地址:https://www.cnblogs.com/gunduzi/p/13255000.html