• 冒泡排序


    冒泡排序思想

    一样可能需要一副扑克牌。

    • 场景0:现有数组([2,5,3,1,4]),求这个数组的从小到大排序后数组表现。
    • 解答方式:类似插入排序,只不过相对来说冒泡的表现更差但也更容易理解。同样分为两个数组,左边的数组为原数组([2,5,3,1,4]),右边的数组为([]),也就是空数组,但也可以认为右边的数组始终有序。此时2与5开始比较。5 > 2,然后5依次分别与3,1,4进行比较。最终确定出来的结果是5是最大的,然后放置右边的数组。此时两个数组分别为([2,3,1,4][5])。接着2与3比较,3与1,3与4比较。得到结果为([2,1,3][4,5])。依次进行比较,直到确定第n个位置的元素是此时前n个元素中数值最大的。

    冒泡排序的思想关键就是依次确定第n个元素是前n个元素最大的,第n-1个元素是前n-1个元素中最大。冒泡排序的过程会改变元素的位置。

    冒泡Demo

    package Sort;
    
    import java.util.Arrays;
    
    import static Sort.InsertSort.arr;
    
    /**
     * 实现冒泡排序
     * 
     * @author :Ldity
     * @date: 2020/8/10
     */
    public class BubbleSort {
        /**
         * 比较数组中两个元素的大小,如果前一个元素大于后一个元素,那么交换位置
         * 
         * @param arr 目的数组
         * @param first 前一个数组数
         * @param last 后一个数组数
         */
        public static void exchange(int[] arr, int first, int last){
            if(arr[first] > arr[last]){
                int tmp = arr[first];
                arr[first] = arr[last];
                arr[last] = tmp;
            }
        }
    
        /**
         * 冒泡排序的实现
         * 
         * @param arr 未排序的数组
         */
        public static void bubbleSort(int[] arr){
            int n = arr.length;
            // 遍历N个元素
            for(int i = 0; i < n; i++){
                // 从前往后比较,以及此时该位置元素的最大值
                for(int j = 0; j < n - i - 1; j++){
                    exchange(arr,j,j+1);
                }
            }
        }
        public static void main(String[] args){
    
            int[] nums = {1,5,2,4,3};
            bubbleSort(nums);
            System.out.println(Arrays.toString(nums));
        }
    }
    
    
  • 相关阅读:
    P1662 数7
    P3645 [APIO2015]雅加达的摩天楼
    P3396 哈希冲突
    P7479 至曾是英雄的您
    P7480 Reboot from Blue
    Apache Commons Collections
    ESP8266 WIFI杀手
    ESP8266 固件升级
    ESP8266 MicroPython安装与使用
    Window 安装子系统
  • 原文地址:https://www.cnblogs.com/Di-iD/p/13785073.html
Copyright © 2020-2023  润新知