广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >冒泡排序详细详解
  • 778
分享到

冒泡排序详细详解

算法 2023-10-27 18:10:57 778人浏览 独家记忆
摘要

因为在面试时  经常手写冒泡排序   可是冒泡排序看起来容易  理解起来也是有点问题   所以今天把冒泡排序的知识点详细的从头整理一下 如果下面的文字不理解   可以参考B站【Java基础入门 冒泡排序】https://www.bilibi

因为在面试时  经常手写冒泡排序   可是冒泡排序看起来容易  理解起来也是有点问题   所以今天把冒泡排序的知识点详细的从头整理一下

如果下面的文字不理解   可以参考B站【Java基础入门 冒泡排序】https://www.bilibili.com/video/BV1td4y1g7Fy?vd_source=581d732b20cb23e01428068f153a99ed

我也是用的这个例子

我们以下面的例子为例

题目:

使用冒泡排序,实现整型数组元素的排序操作比如:int[] arr = {9, 7, 8, 5, 6, 4, 3, 2, 1};
分析

我们先比较内层  就是第一轮  每相邻二个元素  交换位置 交换的规则 默认大的放后面 小的放前面

我们如果想实现数组的两两交换的话  我们这里面   我们应该让arr[0]与arr[1]进行比较  大的放在前面  小的放在后面

arr[0]=9

arr[1]=7

如果arr[0]>arr[1]   那么就要进行比较   要进行交换就要引入第三方变量 temp  

所以我们应该写的代码如下 

if(arr[0]>arr[1]){ int temp =arr[0]; arr[0] =arr[1]; arr[1]=temp;}

这时我们的数据就变成

int[] arr = {7,9, 8, 5, 6, 4, 3, 2, 1};

接下去在这个数据的基础上  我们的arr[1]和arr[2]进行比较

arr[1] =9

arr[2] =8

如果arr[1]>arr[1]   那么就要进行比较   要进行交换就要引入第三方变量 temp  

所以我们应该写的代码如下 

if(arr[1]>arr[2]){ int temp = arr[1]; arr[1]   = arr[2]; arr[2]   = temp;}

这时我们的数据就变成

int[] arr = {7,8, 9, 5, 6, 4, 3, 2, 1};

一直相邻比较后  我们就可以求得最大值

由我们的分析  我们每次的代码都是重复  主要是重复的代码 我们就要用到循环  所以我们就可以书写代码如下   完成每轮交换  完成第一轮交换后  9就在最右边   取得最大值

public class BubbleSortTest3 {    public static void main(String[] args) {                int[] arr = {9, 7, 8, 5, 6, 4, 3, 2, 1};        for (int j = 0; j < arr.length; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }    }}

但是我们上面的代码是有错的  

当i取得最大索引的时候  这里我们i的最大索引是8  也就是arr[8]   arr[8]>arr[9]  可是我们并没有9的索引  如果这样写的话  会报如下错误

所以应该写成下面这个样子

public class BubbleSortTest3 {    public static void main(String[] args) {                int[] arr = {9, 7, 8, 5, 6, 4, 3, 2, 1};        for (int j = 0; j < arr.length-1; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }    }}

这样第一轮交换就已经拿到最大值

接下去我们进行第二轮交换

因为第一轮时  最大值已经确定下来了 所以我们不用在比较最大值    所以arr.length-1-1

这样子数组中的元素我们就可以少比较一个

第二轮比较的代码如下 

package com.atguigu4.search_sort.exer3;import java.util.Arrays;public class BubbleSortTest3 {    public static void main(String[] args) {                int[] arr = {9, 7, 8, 5, 6, 4, 3, 2, 1};        //排序前  对数组进行遍历        System.out.println("排序前");        for (int i = 0; i < arr.length; i++) {        }        System.out.println(Arrays.toString(arr));        //排序后        System.out.println("排序后");        //第一轮        System.out.println("第一轮");        for (int j = 0; j < arr.length-1; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }        System.out.println(Arrays.toString(arr));        //第二轮        System.out.println("第二轮");        for (int j = 0; j < arr.length-1-1; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }        System.out.println(Arrays.toString(arr));    }}

以此类推  我们比较8轮

package com.atguigu4.search_sort.exer3;import java.util.Arrays;public class BubbleSortTest3 {    public static void main(String[] args) {                int[] arr = {9, 7, 8, 5, 6, 4, 3, 2, 1};        //排序前  对数组进行遍历        System.out.println("排序前");        for (int i = 0; i < arr.length; i++) {        }        System.out.println(Arrays.toString(arr));        //排序后        System.out.println("排序后");        //第一轮        System.out.println("第一轮");        for (int j = 0; j < arr.length-1-0; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }        System.out.println(Arrays.toString(arr));        //第二轮        System.out.println("第二轮");        for (int j = 0; j < arr.length-1-1; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }        System.out.println(Arrays.toString(arr));        //第三轮        System.out.println("第三轮");        for (int j = 0; j < arr.length-1-2; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }        System.out.println(Arrays.toString(arr));        //第四轮        System.out.println("第二轮");        for (int j = 0; j < arr.length-1-3; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }        System.out.println(Arrays.toString(arr));        //第五轮        System.out.println("第四轮");        for (int j = 0; j < arr.length-1-4; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }        System.out.println(Arrays.toString(arr));        //第六轮        System.out.println("第六轮");        for (int j = 0; j < arr.length-1-5; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }        System.out.println(Arrays.toString(arr));        //第七轮        System.out.println("第七轮");        for (int j = 0; j < arr.length-1-6; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }        System.out.println(Arrays.toString(arr));        //第八轮        System.out.println("第八轮");        for (int j = 0; j < arr.length-1-7; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }        System.out.println(Arrays.toString(arr));    }}

每一轮比较的代码都是重复的   所以我们可以把循环的代码用for循环循环包起来

循环

package com.atguigu4.search_sort.exer3;import java.util.Arrays;public class BubbleSortTest3 {    public static void main(String[] args) {                int[] arr = {9, 7, 8, 5, 6, 4, 3, 2, 1};        //排序前  对数组进行遍历        System.out.println("排序前");        for (int i = 0; i < arr.length; i++) {        }        System.out.println(Arrays.toString(arr));        //排序后        System.out.println("排序后");        for (int i = 0; i < arr.length; 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;                }            }            System.out.println(Arrays.toString(arr));        }//        //第一轮//        System.out.println("第一轮");//        for (int j = 0; j < arr.length-1-0; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));////////////        //第二轮//        System.out.println("第二轮");//        for (int j = 0; j < arr.length-1-1; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));//////        //第三轮//        System.out.println("第三轮");//        for (int j = 0; j < arr.length-1-2; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));////////        //第四轮//        System.out.println("第二轮");//        for (int j = 0; j < arr.length-1-3; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));////////        //第五轮//        System.out.println("第四轮");//        for (int j = 0; j < arr.length-1-4; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));//////        //第六轮//        System.out.println("第六轮");//        for (int j = 0; j < arr.length-1-5; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));////////        //第七轮//        System.out.println("第七轮");//        for (int j = 0; j < arr.length-1-6; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));////////        //第八轮//        System.out.println("第八轮");//        for (int j = 0; j < arr.length-1-7; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));//    }}

当第一轮比较的时候  arr.length-1-0   因为谁都不确定  所以都要比较

当第二轮比较的时候  arr.length-1-1  因为最大值已经出来了

当第三轮比较的时候  arr.length-1-2  因为最大值和次大值已经出来了

轮数=元素的总个数-1

因为我们数组的无数有9个 所以我们要比较8轮

因为我们有9个数据(有9个元素)  所以我们要进行8轮交换 所以我们的代码变成如下
package com.atguigu4.search_sort.exer3;import java.util.Arrays;public class BubbleSortTest3 {    public static void main(String[] args) {                int[] arr = {9, 7, 8, 5, 6, 4, 3, 2, 1};        //排序前  对数组进行遍历        System.out.println("排序前");        for (int i = 0; i < arr.length; i++) {        }        System.out.println(Arrays.toString(arr));        //排序后        System.out.println("排序后");        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;                }            }            System.out.println(Arrays.toString(arr));        }//        //第一轮//        System.out.println("第一轮");//        for (int j = 0; j < arr.length-1-0; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));////////////        //第二轮//        System.out.println("第二轮");//        for (int j = 0; j < arr.length-1-1; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));//////        //第三轮//        System.out.println("第三轮");//        for (int j = 0; j < arr.length-1-2; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));////////        //第四轮//        System.out.println("第二轮");//        for (int j = 0; j < arr.length-1-3; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));////////        //第五轮//        System.out.println("第四轮");//        for (int j = 0; j < arr.length-1-4; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));//////        //第六轮//        System.out.println("第六轮");//        for (int j = 0; j < arr.length-1-5; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));////////        //第七轮//        System.out.println("第七轮");//        for (int j = 0; j < arr.length-1-6; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));////////        //第八轮//        System.out.println("第八轮");//        for (int j = 0; j < arr.length-1-7; j++) {////            if (arr[j] > arr[j + 1]) {//                int temp = arr[j];//                arr[j] = arr[j + 1];//                arr[j + 1] = temp;//            }//        }////        System.out.println(Arrays.toString(arr));//    }}

所以综合以上分析  我们冒泡排序代码如下:

package com.atguigu4.search_sort.exer3;import java.util.Arrays;public class BubbleSortTest3 {    public static void main(String[] args) {                int[] arr = {9, 7, 8, 5, 6, 4, 3, 2, 1};        //排序前  对数组进行遍历        System.out.println("排序前");        for (int i = 0; i < arr.length; i++) {        }        System.out.println(Arrays.toString(arr));        //排序后        System.out.println("排序后");        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;                }            }            System.out.println(Arrays.toString(arr));        }    }}

 输出结果如下 :

也可以把代码封装成一个方法  Ctrl+Alt+M

package com.atguigu4.search_sort.exer3;import java.util.Arrays;public class BubbleSortTest3 {    public static void main(String[] args) {                int[] arr = {9, 7, 8, 5, 6, 4, 3, 2, 1};        //排序前  对数组进行遍历        System.out.println("排序前");        for (int i = 0; i < arr.length; i++) {        }        System.out.println(Arrays.toString(arr));        //排序后        System.out.println("排序后");        sort(arr);    }    private static void sort(int[] arr) {        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;                }            }           // System.out.println(Arrays.toString(arr));                   }    }}

来源地址:https://blog.csdn.net/m0_59281987/article/details/133937994

--结束END--

本文标题: 冒泡排序详细详解

本文链接: https://www.lsjlt.com/news/499112.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 冒泡排序详细详解
    因为在面试时  经常手写冒泡排序   可是冒泡排序看起来容易  理解起来也是有点问题   所以今天把冒泡排序的知识点详细的从头整理一下 如果下面的文字不理解   可以参考B站【Java基础入门 冒泡排序】https://www.bilibi...
    99+
    2023-10-27
    算法
  • java冒泡排序和选择排序详解
    目录1、冒泡排序2、选择排序法总结1、冒泡排序 冒泡排序(Bubble Sorting)的基本思想是:通过对待 排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发...
    99+
    2022-11-12
  • C++冒泡排序与选择排序详解
    目录 一.冒泡排序1.概念 2.图解3.代码的思路4.代码例子 二.选择排序1.概念2.图解3.代码的思路总结 一.冒泡排序 1.概念 冒泡排序这种排序方法其实关键词就在于冒泡两个字...
    99+
    2022-11-12
  • 详解Java之冒泡排序与选择排序
    目录一.冒泡排序1.概念2.图解3.代码的思路4.代码例子二.选择排序1.概念2.图解3.代码的思路总结一.冒泡排序 1.概念 冒泡排序这种排序方法其实关键词就在于冒泡两个字,顾名思...
    99+
    2022-11-12
  • JAVA十大排序算法之冒泡排序详解
    目录冒泡排序代码实现代码实现时间复杂度算法稳定性总结冒泡排序 1.从数组头开始,比较相邻的元素。如果第一个比第二个大(小),就交换它们两个 2.对每一对相邻元素作同样的工作,从开始第...
    99+
    2022-11-12
  • C语言详解冒泡排序实现
    目录前言一、冒泡排序是什么二、具体步骤1.代码解释2.读入数据总结前言 在排序中,有各种各样的排序方式,今天我们将要来介绍《冒泡排序》。今天会从冒泡排序的具体意义和他的操作来展开。 ...
    99+
    2022-11-13
  • 图文详解Python冒泡排序算法
    本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于冒泡排序的相关问题,包括了算法描述、分析、代码实现等等内容,下面一起来看一下,希望对大家有帮助。冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数...
    99+
    2022-06-14
    python
  • C语言中冒泡排序算法详解
    目录一、算法描述二、算法分析三、完整代码总结一、算法描述 比较相邻两个元素,如果第一个比第二个大则交换两个值。遍历所有的元素,每一次都会将未排序序列中最大的元素放在后面。假设数组有 ...
    99+
    2022-11-12
  • Python冒泡排序注意要点实例详解
    冒泡排序注意三点: 1. 第一层循环可不用循环所有元素。 2.两层循环变量与第一层的循环变量相关联。 3.第二层循环,最终必须循环集合内所有元素。 示例代码一: 1.第一层循环,只循环n-1个元素。 2....
    99+
    2022-06-04
    详解 要点 实例
  • C语言冒泡排序算法代码详解
    今天我们来用C语言实现一下冒泡排序 首先我们来了解一下什么叫做冒泡排序,冒泡顾名思义把质量轻的气体(如二氧化碳一样)浮到水面上(如可乐中的二氧化碳),因此冒泡排序的原理就是N个元素在...
    99+
    2022-11-13
  • TypeScript实现十大排序算法之冒泡排序示例详解
    目录一. 冒泡排序的定义二. 冒泡排序的流程三. 冒泡排序的图解四. 冒泡排序的代码五. 冒泡排序的时间复杂度六. 冒泡排序的总结一. 冒泡排序的定义 冒泡排序是一种简单的排序方法...
    99+
    2023-02-23
    TypeScript冒泡排序算法 TypeScript 算法
  • java冒泡排序
    基本介绍 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值, 若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的...
    99+
    2023-09-14
    java 排序算法 算法
  • Python_冒泡排序
    从小到大的排序:(最前面的数和一步步和后面的数比较,如果大于则交换,如果不大于则继续循环) 方法1: data = [65, 1, 45, 77, 3, 9, 43, 23, 7, 53, 213, 10] for i in rang...
    99+
    2023-01-30
  • java数据结构与算法之冒泡排序详解
    本文实例讲述了java数据结构与算法之冒泡排序。分享给大家供大家参考,具体如下:前面文章讲述的排序算法都是基于插入类的排序,这篇文章开始介绍交换类的排序算法,即:冒泡排序、快速排序(冒泡排序的改进)。交换类的算法:通过交换逆序元素进行排序的...
    99+
    2023-05-31
    java 数据结构 算法
  • C语言实现冒泡排序算法的示例详解
    目录1. 问题描述2. 问题分析3. 算法设计动图演示4. 程序设计设计一设计二结论5. 流程框架6. 代码实现7. 问题拓展1. 问题描述 对N个整数(数据由键盘输入)进行升序排列...
    99+
    2022-11-13
  • C++ qsort函数排序与冒泡模拟实现流程详解
    目录一、qsort排序函数1、函数功能特点2、函数参数3、比较函数4、测试qsort排序(1)测试qsort函数排序整形(2)测试qsort函数排序结构体二、冒泡模拟qusort函数...
    99+
    2022-11-13
    C++ qsort函数排序 C++冒泡排序
  • C语言qsort函数用冒泡排序实现过程详解
    目录前言1.冒泡排序的实现1.1冒泡排序的概念1.2具体代码的实现2.qsort函数3.qsort函数的实现前言 这篇文章就是指针进阶的收尾环节了,相信看过C语言进阶—&...
    99+
    2023-02-14
    C语言qsort函数 C语言冒泡排序实现qsort函数
  • java排序算法之冒泡排序
    本文实例为大家分享了java排序算法之冒泡排序的具体代码,供大家参考,具体内容如下 冒泡排序 冒泡排序无疑是最为出名的排序算法之一,从序列的一端开始往另一端冒泡(你可以从左往右冒泡,...
    99+
    2022-11-12
  • java 排序算法之冒泡排序
    目录基本介绍图解冒泡排序算法的过程代码实现演变过程优化封装算法大量数据耗时测试基本介绍 冒泡排序(Bubble Sorting)(时间复杂度为 O(n²))的基本思想:通过...
    99+
    2022-11-12
  • Python排序算法之冒泡排序
    目录1. 前言2. 冒泡排序算法2.1 摆擂台法2.2 相邻两个数字相比较3. 选择排序算法4. 插入排序5. 快速排序6. 总结1. 前言 所谓排序,就是把一个数据群体按个体数据的...
    99+
    2023-01-07
    怎么用python写出冒泡排序 python中的冒泡排序算法 python冒泡排序简单方法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作