数据结构 07 - 冒泡排序 && 选择排序

数据结构与算法:冒泡排序、插入排序、选择排序 排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序、睡眠排序、面条排序等。我只讲众多排序算法中的一小撮,也是最经典的、最常用的:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。按照时间复杂度把它们分成了三类,本文先分析冒泡、插入、选择三种排序算法 排序算法 时间复杂度 是否基于比较 冒泡、插入、选择 O(n²) √ 快排、归并 O(nlongn) √ 桶、计数、基数 O(n) × 带着问题去学习,是最有效的学习方法。所以按照惯例,我还是先给你 阅读详情

一、冒泡排序

1.基本思想

2.将数组第一个数与其后面的数依次比较

(1)如果大于,就与该数的的值互换
(2)如果小于,则不变
(3)最终数组第一个数就是最小的数了

3.重复第一步骤,将第二个数与其后面的数进行比较

(1)需要重复arr.length - 1轮的比较
(2)每一轮都确定了第 i 个位置的值

代码实现:

    public static void BubbleSort(int[] sort){
        boolean flag = false;//判断flag
       
        for (int i = 0; i < sort.length - 1; i++) {
            for (int j = i; j < sort.length; j++) {//该层循环结束就确定了第i个位置的值
                if (sort[i] > sort[j]) {
                    flag = true;
                    int temp = sort[j];
                    sort[j] = sort[i];
                    sort[i] = temp;
                }
            }
            System.out.println("第" + i + "趟排序结果:");
            for (int k = 0; k < sort.length; k++) {
                System.out.print(sort[k] + "\t");
            }
            System.out.println();
            if (flag == false) {//说明在第i次循环时,没有发生过交换
                break;
            }
        }
}

二、选择排序

在这里插入图片描述
1.思路分析
(1)首先确定需要进行arr.length - 1轮选择
(2)每一轮确定一个最小值,然后将其赋给数组的相应位置

代码实现:

public class SelectionSort {
    public static void main(String[] args) {
        int[] arr = new int[]{1,3,2,7,5,-1,0,89,13,24,45,33};
        SelectionSort(arr);
        System.out.println(Arrays.toString(arr));

        //创建一个80000个数的随机数组
        int[] ran = new int[80000];
        for (int i = 0; i < ran.length; i++) {
            ran[i] = (int)(Math.random() * 800000);
        }

        Date date1 = new Date();
        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式化
        String date1Str = simpleDateFormat1.format(date1);
        System.out.println("排序前的时间:" + date1Str);

        SelectionSort(ran);

        Date date2 = new Date();
        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式化
        String date2Str = simpleDateFormat2.format(date2);
        System.out.println("排序后的时间:" + date2Str);
    }
    public static void SelectionSort(int[] arr){
        for (int i = 0; i < arr.length - 1; i++) {
            int min = arr[i];
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
               if(min > arr[j]){
                   min = arr[j];
                   minIndex = j;
               }
            }
            //arr[0] = min,但是在此之前要把arr[0]给保留住,因为这个数还要进行接下来的比较
            arr[minIndex] = arr[i];
            arr[i] = min;
        }
//        for (int i = 0; i < arr.length; i++) {
//            System.out.print(arr[i] + "\t");
//        }
    }
}
冒泡排序.cpp 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 立即下载

相关推荐

【Unity人物动画】SALSA With RandomEyes (语音生成嘴型/人物说话) 使用

SALSA使用探索 之前做项目时想做人物说话的嘴部动作,因为我们的语音是AI合成的,语音片段很多,如果能根据语音生成嘴部动画,那将极大便利我们的工作。后面是找到了SALSA的这款插件,并摸索出使用方法。 1 插件介绍 官方网站:https://crazyminnowstudio.com/ 一个能做2D纸片人和3D人物模型嘴部和眼睛动画的插件,由两人组成的独立工作室(疯狂米诺工作室)开发。 插件全名为SALSA With RandomEyes,2014年上架Asset Store,目前是已下架,替换为新版本

里约热内驴的博客 1万+

字符串的冒泡排序-----python实现

7-30 字符串的冒泡排序(20 分) 我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(&lt;N),输出扫描完第K遍后的中间结果序列。 输入格式: 输入在第1行中给出N和K(1≤K&lt;N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。 输出格式: 输出冒泡排序法扫描完第K遍后的中间结果序列,...

kg15511011321的博客 1933

傅里叶红外(FT-IR):Origin数据处理、光谱绘图、曲线优化、图形美化

双击 X 轴,选择“轴线和刻度线”,设置粗细为“2”(较常用的粗细度),主刻度和次刻度为“朝内”,然后在此对话框内选择左轴,设置粗细为“2”,主刻度和次刻度为“无”,上轴和右轴同左轴。(4)在第二个图层基础上新建第三个图层,针对第二组数据重复上述中(1)和(2)的操作,再添加第三组数据的折线图,并重复上述中(3)的操作。FTIR 光谱上的峰只有相对的强弱,因此只分析一个光谱上的一个峰的强度大小并无意义,一般分析两个光谱在同一位置的峰强相对大小,或者分析同一光谱不同位置的峰强相对大小并与另一光谱进行比较。

qiushireader的博客 3934

【数算-07】冒泡排序

文章目录1、冒泡排序算法思路2、冒泡排序算法图解3、冒泡排序代码实现(已优化) 1、冒泡排序算法思路 2、冒泡排序算法图解 3、冒泡排序代码实现(已优化) 优化思路: import org.junit.Test; import java.lang.reflect.Array; import java.util.Arrays; /** * @author zhihua.li * @date 2021/2/2 - 9:29 **/ public class BubbleSorting {

weixin_45729934的博客 541

OpenCV透视变换实战:5分钟搞定歪斜证件照矫正(附完整代码)

本文详细介绍了如何使用OpenCV的透视变换技术快速矫正歪斜证件照,包含完整的Python代码实现。通过特征检测、坐标计算和矩阵变换三个核心步骤,5分钟内即可将手机拍摄的歪斜图像自动矫正为专业级证件照,大幅提升图像处理效率。

weixin_29094979的博客 483

【实战指南】基于YOLOv11的肺结节检测系统开发与优化(LUNA2016数据集)

本文提供了基于YOLOv11模型和LUNA2016数据集开发肺结节检测系统的完整实战指南。详细介绍了从环境搭建、数据预处理、模型训练与优化,到构建Web应用系统的全流程,旨在帮助开发者快速掌握医疗影像AI项目的核心开发技能。

weixin_29031057的博客 141

PTA-7-1 冒泡法排序 (20分)

问题描述: 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。 本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。 输入: 输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。 输出: 在一行中输出冒泡排序法

星光不问赶路人的博客 1万+

Ubuntu开机卡在BusyBox?3种方法快速修复initramfs错误(附详细命令)

本文详细介绍了Ubuntu开机卡在BusyBox并出现initramfs错误的3种修复方法,包括使用fsck检查文件系统、调整BIOS/UEFI存储设置以及修改GRUB内核参数。针对常见的文件系统错误和根设备无法找到问题,提供了具体的命令行操作步骤和实用技巧,帮助用户快速恢复系统启动。

milk8的博客 785

7-1 字符串的冒泡排序

暑假字符串专题HBU程序设计训练营总结

韩旭051的博客 3620

【气候极端指数】MATLAB计算各种气候极端指数

简介各类气候极端指数,及其MATLAB计算代码

WW、forever的博客 4917

RT-DETR改进策略【卷积层】| CVPR2025 GBConv轻量门控瓶颈卷积 低秩瓶颈降参 + 门控聚焦形态,强效捕捉纤细目标

裂缝形态不规则、纹理纤细,传统卷积参数大、计算冗余,且无法动态聚焦裂缝形态;背景噪声强易干扰特征提取,需要轻量且能自适应聚焦裂缝形态的卷积单元,因此提出轻量门控瓶颈卷积 GBC。

Limiiiing的博客 142

冒泡排序与选择排序

一.冒泡排序 1.概念 冒泡排序这种排序方法其实关键词就在于冒泡两个字,顾名思义就是数字不断比较然后最大的突出来,也就是说把相邻的两个数字两两比较,当一个数字大于右侧相邻的数字时,交换他们的位置,当一个数字和他右侧的数字小于或等于的时候,不交换。 2.图解 关于冒泡排序我自己画了一幅图来描述他的一轮过程 这里我举了五个无序的数{7,3,6,5,4} 由此可看出他不断与右侧相邻的数字进行比较,当他大于右边的数字就交换,否则不交换,就用这种方法不断进行排序进行很多轮,最后得出一个有序的序列...

weixin_64448174的博客 9554

40、5G NR射频要求解析

本文详细解析了5G NR射频相关要求,包括参考灵敏度与动态范围的定义、接收机对干扰信号的抗扰性要求(如阻塞、邻道选择性等)、辐射射频要求在FR1和FR2频段的差异,以及多标准无线电基站(MSR)的发展及其对射频要求的影响。内容涵盖测试模型、干扰场景、具体指标和实现挑战,为理解和应用5G NR射频规范提供了全面指导。

qsc901234的博客 245

【数据结构】插入排序、选择排序、冒泡排序、希尔排序、堆排序

生活中我们总是会碰到各种各样的排序,今天我们就对部分常用的排序进行总结和学习,今天的内容还是相对比较简单的一部分,各位一起加油哦!

m0_64826370的博客 937

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

冒泡排序和选择排序的不同

排序是计算机程序中的主要任务之一,数组的元素按特定顺序排列。排序使搜索更容易。冒泡排序和选择排序是排序算法,可以通过它们使用的排序方法加以区分。冒泡排序本质上是交换元素,而选择排序通过选择元素来执行排序。     二者的另一个显著区别是冒泡排序是一种稳定的算法,而选择排序是一种不稳定的算法。稳定的意思是,在列表或数组排序前后,具有相同值的记录以相同的顺序出现。一般来说,大多数稳定快速的算法都使用额外的内存。

运维狗的备忘录 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【恋上数据结构】冒泡排序、选择排序、堆排序

冒泡排序冒泡排序介绍排序准备工作冒泡排序-无优化冒泡排序-优化1 从经典的冒泡排序开始! 冒泡排序介绍 冒泡排序也叫做起泡排序 执行流程 ① 从头开始比较每一对相邻元素,如果第1个比第2个大,就交换它们的位置 执行完一轮后,最未尾那个元素就是最大的元素。 ② 忽略①中曾经找到的最大元素,重复执行步骤①,直到全部元素有序。 排序准备工作 写一个抽象类 Sort.java 实现自定义对象的比较(cm...

萌宅鹿的技术小屋 2384

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【数据结构】常见排序算法——常见排序介绍、选择排序(直接选择排序、堆排序)交换排序(冒泡排序)

常见排序算法、选择排序、直接选择排序、堆排序、交换排序、冒泡排序

Crocodile1006的博客 3047

【数据结构与算法】排序算法:冒泡排序,冒泡排序优化,选择排序、选择排序优化

冒泡排序的基本思想是通过相邻元素之间的比较和交换来逐步将最大(或最小)的元素移到右边(或左边)。思想:在优化版本的冒泡排序算法中,通过添加一个标记变量flag,可以在一轮排序过程中标记是否有进行过交换操作,通过这种方式,可以减少交换的次数,从而提高排序的效率。综上所述,选择排序的时间复杂度为O(n^2),空间复杂度为O(1),并且是一种不稳定的排序算法。通过每次从剩余未排序部分选择最小的元素,并将其放在已排序部分的末尾,逐步构建有序序列。优化版本的思想是在选择排序的基础上,

2301_76606232的博客 1125

选择排序与冒泡排序

数组中常见的操作就是对数组进行排序,我们常用的排序方法有两种,即冒泡排序和选择排序,这篇博客,我们一起来详细了解一下这两种排序方法的使用方法。 选择排序 1、选择排序具体过程如下图,排序过程是从左向右排序,选取数组第一个元素,依次和后面的元素比较大小,如果小于第一个元素,则将两个元素的位置交换,最终将最小的元素放在数组第一个位置,然后进行第二个位置存储元素的选择,即我们可以理解为选择排序...

LeeBlog 2063

冒泡排序、选择排序、计数排序(C语言实现)

快来学会这三个简单的排序,代码量少,实现简单,有突发想处理小段数据时再合适不过了,特别适合新手学习的三个简单排序算法,你确定不来看看吗~

Brant_zero的博客 1490

数据结构 之 【排序】(直接选择排序、堆排序、冒泡排序)

所有排序的实现皆以为例。

zl_dfq的博客 673

Java-数据结构与算法-排序(冒泡排序,选择排序对比)

冒泡排序与选择排序 一,冒泡排序 冒泡排序(BubbleSorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。 二,冒泡排序优化: 因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素...

大美妞的博客 5077

冒泡排序&&选择排序

冒泡排序&&选择排序 package cn.lijun.demo;//冒泡排序public class Test5 { public static void main(String[] args) { int[] arr = {12,2,25,89,5}; bubbleSort(arr); printArray(arr); } public static void bu...

weixin_34204057的博客 99

冒泡排序和选择排序的区别

** 冒泡排序和选择排序的区别 ** 初学c语言不久,发现好多同学对选择排序和冒泡排序傻傻分不清楚,在这里斗胆对它们的区别作出解释,也是对自己的学习成果作出检验,欢迎个位作出批评指正。 冒泡排序用简单的话来讲就是,从左往右,两两相互比较大小,左边的大就交换位置,循环往复,把较大的放后面。 下面是冒泡排序图解 下面是冒泡排序代码实现 //冒泡排序 #include<stdio.h> ...

qq_45867979的博客 1618

Java经典算法冒泡排序&&选择排序

需求: 数组元素:{24, 69, 80, 57, 13} 请对数组元素进行排序。 排序后的结果应为:{13,24,57,69,80} 使用冒泡排序法&&选择排序法排序 分析: 冒泡排序: 相邻元素两两比较,大的往后放第一次完毕,最大值出现在了最大索引处; **本质:** 通过比较做排序 1.比较的次数 双重for 循环 ...

weixin_45716968的博客 583
上一篇: 数据结构 06 - 递归回溯问题(二):八皇后问题
下一篇: 数据结构 08 - 插入排序 && 希尔排序
终难忘世外仙株寂寞林
博客等级 码龄6年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值