冒泡排序

冒泡排序思想

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

  • 场景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));
    }
}

posted @ 2020-10-09 12:31  DiiD  阅读(379)  评论(0编辑  收藏  举报