速通冒泡排序!

简介: 速通冒泡排序!

作者认为,一篇文章就应该和函数一样,多一分不多,少一分不少,所以我将用最短的字数,在最快的时间里帮你了解或者巩固传说中的冒泡排序

--------------------------------------------华丽的分割线------------------------------------------------------------------

int[] arr = {1, 7, 4, 6, 9, 3, 8, 2, 5, 10};
for (int i = 0; i < arr.length - 1; i++) {
  for (int j = 0; j < arr.length - 1 - i; j++) {
       if (arr[j] > arr[j + 1]) {
       int temp = arr[j];
       arr[j] = arr[j + 1];
       arr[j + 1] = temp;
        }
    }
}

如果是寻找代码怎么写的小伙伴,可以直接看这个!做一名cv程序猿,但我肯定知道,小伙伴们肯定希望自己学的更多,把自己锻造成一把锋利的宝剑!所以让我来抽丝剥茧,逐层演绎为什么可以。

----------------------------------------------------伟大的分割线---------------------------------------------------------

就跟谈恋爱一样,你总要知道对方的优点和确定,这样才会考虑要不要用它,不用急,我来给

你介绍这个对象!

冒泡排序:

找到最大值放在数组的最右边,之后数组左边的数组成的数列重新找到最大值,放到最右边。这样持续下去,直到数组按照从小到大排列。

优点:代码简单,稳定。空间复杂度较低。

缺点:慢。

------------------------------------------------------华丽的分割线---------------------------------------------------------

接下来让我来讲解为什么这样可以。

首先先看这样的数组

我们按照定义所描述的,找到最大值,将其放到数组的最右边,很明显,可以遍历数组,用交换法,将左边的最大值运到最右边。

 int[] arr = {1, 7, 4, 6, 9, 3, 8, 2, 5, 10};
        for (int i = 0; i < arr.length-1; i++) {
            if(arr[i] > arr[i+1]){
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }

由于这里最大值已经是10,最大值的位置没有改变,,而第二大的9,放在了10的左边。数组长这个样子。

我们将arr的长度减少一,将剩下的数据继续这样操作

int[] arr = {1, 7, 4, 6, 9, 3, 8, 2, 5, 10};
        for (int i = 0; i < arr.length-1; i++) {
            if(arr[i] > arr[i+1]){
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
        for (int i = 0; i < arr.length-1-1; i++) {
            if(arr[i] > arr[i+1]){
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }

由于这里最大值已经是9,最大值的位置没有改变,,而第二大的8,放在了9的左边。数组长这个样子。

以此类推,当我们将arr.length一直减去,最后终会将数组从小到大排序。确实是这样!


但是我们不能一次次这样写啊,所以可以用两个for循坏,来减少代码量!

那么循坏多少次呢?找规律,发现应该是 arr.length-1次。

所以我们将上面这种代码循坏arr.length-1次,而内部循坏体里面的i用j代替,循坏的次数也应该是剩余数组的长度,可以定义j=i+1.因为每次里面循坏一次,i就-1,然后下一次里面的循坏次数也会-1,巧妙的利用!

也就是这样:

int[] arr = {1, 7, 4, 6, 9, 3, 8, 2, 5, 10};
for (int i = 0; i < arr.length - 1; i++) {
  for (int j = 0; j < arr.length - 1 - i; j++) {
       if (arr[j] > arr[j + 1]) {
       int temp = arr[j];
       arr[j] = arr[j + 1];
       arr[j + 1] = temp;
        }
    }
}

运行,观看结果。

果然和我们想的一样。

--------------------------------------------------------优雅的分割线-------------------------------------------------------

这样一来,我们就学会了冒泡排序!为自己鼓掌吧!如果读者得到了帮助,希望各位看官点个关

注,那就更好了哦


相关文章
|
2月前
|
人工智能 算法
蓝桥杯真题宝藏排序详解 | 冒泡排序 选择排序 插入排序
蓝桥杯真题宝藏排序详解 | 冒泡排序 选择排序 插入排序
|
7月前
|
搜索推荐 算法
【八大经典排序算法】冒泡排序
【八大经典排序算法】冒泡排序
37 0
|
7月前
|
搜索推荐 算法
拒绝水文!八大排序(二)【适合初学者】冒泡排序和选择排序
拒绝水文!八大排序(二)【适合初学者】冒泡排序和选择排序
|
算法 C语言 C++
用代码生撸qsort函数来实现冒泡排序
用代码生撸qsort函数来实现冒泡排序
68 0
|
存储 搜索推荐 算法
十大算法之冒泡排序
十大算法之冒泡排序
|
前端开发
前端知识案例-冒泡排序
前端知识案例-冒泡排序
74 0
前端知识案例-冒泡排序
|
算法 C语言
C语言程序设计——冒泡排序
C语言程序设计——冒泡排序
249 0
C语言程序设计——冒泡排序
|
算法 搜索推荐
# 每日一问——什么是快速排序?如何优化?
快速排序是从冒泡排序演变而来的算法,但是其比冒泡排序要高效,所以叫做快速排序,简单理解如下。
91 0
|
SQL 数据挖掘 Python
【边学边敲边记】LeetCode006:三数之和
【边学边敲边记】LeetCode006:三数之和
【边学边敲边记】LeetCode006:三数之和
|
SQL 算法 数据挖掘
【边学边敲边记】LeetCode007:最接近的三数之和
【边学边敲边记】LeetCode007:最接近的三数之和
105 0
【边学边敲边记】LeetCode007:最接近的三数之和