《排序算法》系列 -浅显易懂的认识---冒泡排序

前言

作为一个大学学过数据结构的学渣来说,整个四年除了直到一个冒泡排序(当然了也不理解,只是为了应付面试而背的代码),其它排序算法都不懂,于是乎在自己应对面试的时候随便一个算法题自己就懵逼了,表情如下:
在这里插入图片描述
更惨的是自己去学习刷力扣题的时候除了会用for循环,什么都不知道了。
在这里插入图片描述
于是痛定思痛,开始自己排序算法的学习,毕竟只要肯学就不算晚。
好了言归正传,今天开始学习的是冒泡排序,自己虽然会写冒泡排序的逻辑代码,但是没有研究过为什么他要那么执行啊,所以呢自己就要知其所以然。

自己的理解如下:

import java.util.Arrays;

/**
 * @author Administrator
 * 冒泡排序中,对数组中的元素进行循环,将每次循环的值与该值后面的值进行比较,若大于则进行交换
 * 每次循环都可以将最大的值依次排序到后面
 * 这样最小的值就排列到前面
 * 从而完成排序的逻辑
 *
 *
 * 给出一个2 5 4 3 1 的数组
 * 第一次排序:2和5比较,2小于5,不交换位置  2 5 4 3 1
 *           5和4比较,5大于4,交换位置 2 4 5 3 1 
 *           5和3比较,5大于3,交换位置 2 4 3 5 1
 *           5和1比较,5大于1,交换位置 2 4 3 1 5
 * 第二次排序:2和4比较,2小于4,不交换位置 2 4 3 1 5
 *           4和3比较,4大于3,交换位置 2 3 4 1 5
 *           4和1比较,4大于1,交换位置 2 3 1 4 5
 * 第三次排序:2和3比较,2小于3,不交换位置 2 3 1 4 5
 *           3和1比较,3大于1,交换位置 2 1 3 4 5
 * 第四次排序:2和1交换位置,2大于1,交换位置1 2 3 4 5
 * 
 *
 */
public class bubbleSort {
    public static void bubbleSort(int[] array){
        //第一次循环  循环出数组中的元素
        for (int i = 0; i < array.length; i++) {
            //第二次循环  控制元素需要循环的次数,第一次冒泡时会将最大的值排序到最后面
            //第二次循环时,会将第二大的值排序到倒数第二个数中
            //依次类推,每次进行循环时不需要再对后面已经排好序的值进行排序了
            //所以长度进行一个-i-1的操作
            for (int j = 0; j < array.length -i -1; j++) {
                //交换元素
                if (array[j]>array[j+1]){
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
    }
    public static void main(String[] args) {
        int[] arr = new int[5];
        arr[0]=2;
        arr[1]=5;
        arr[2]=4;
        arr[3]=3;
        arr[4]=1;
        System.out.println(Arrays.toString(arr));
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

以上就是对冒泡排序的理解,自己在进行研究逻辑时,直接将逻辑写在代码中,方便自己的理解和记忆。

有问题欢迎给予指正,谢谢

在这里插入图片描述

发布了92 篇原创文章 · 获赞 7 · 访问量 7538

猜你喜欢

转载自blog.csdn.net/qq_40126996/article/details/104685305