首页 > 编程语言 > 排序算法之冒泡排序1

排序算法之冒泡排序1

时间:2023-11-26 23:31:58浏览次数:42  
标签:int 元素 冒泡排序 算法 array 排序

一概述

在生活中,我们离不开排序。例如在学校站队时,会按照身高顺序进行排队。每一个月考或者期末的成绩都会按照成绩排名次。

在编程学习中,我们也会经常遇到排序的问题。这种排序的场景非常多。例如在开发一个学生管理系统时,需要按照学号的顺序从小到大去排列。当开发一个电商平台时,需要把同类的商品按照价格从低到高进行排序。当开发一款游戏时,需要按照游戏得分从多到少进行排序,排名第一的玩家就是比赛的MVP。

排序看起来简单,但却蕴含着多种多样的算法和思想。那么常用的排序算法都有:

     根据时间复杂度的不同,主流的排序算法可以分为3大类:

<1>时间复杂度为O(n^2)的排序算法

冒泡排序

选择排序

插入排序

希尔排序(希尔排序比较特殊,它的性能略优于O(n^2)),但又比不上O(nlogn),所以把它归于本类。

<2>时间复杂度为O(nlogn)的排序算法

快速排序

归并排序

堆排序

<3>时间复杂度为线性的排序算法。

计数排序

桶排序

基数排序

上述都是主流的算法,在算法界里面还存在着五花八门的排序,它们都是基于传统的排序而来的,有些则是脑洞大开,如鸡尾酒排序、猴子排序、睡眠排序等。

此外排序算法还可以根据稳定性,划分为稳定排序不稳定排序

即就是:如果值相同的元素在排序后仍然保持着排序前的顺序,则这样的排序算法是稳定的排序;如果值相同的元素,在排序之后打乱了顺序,则这样的排序算法是不稳定的排序。例如下面的例子

                               排序算法之冒泡排序1_时间复杂度

在大多数的场景中,值相同的元素谁先谁后都是无所谓的。但是在某些场景中,值相同的元素必须保持原有的顺序。

二 冒泡排序

冒泡排序的英文是bubble sort,它是一种基础的交换排序

在日常生活中,常见到的汽水,汽水中常常有许多小小的气泡哗啦啦的漂到上面去。这是因为组成小气泡的二氧化碳比水轻,所以小气泡可以一点一点的向上浮动。

而冒泡排序之所以叫冒泡排序,正是因为这种排序算法的每一个元素都可以像小气泡一样,根据自身的大小,一点一点地向着数组地一侧移动。

具体移动的例子如下:

                               排序算法之冒泡排序1_排序算法_02

                               排序算法之冒泡排序1_时间复杂度_03

通过上面的图可以看出,元素9作为数列中最大的元素,就像汽水里面的小气泡一样,“漂”到最右侧。

上述就是冒泡排序的第一论。数列最右侧元素9的位置可以认为是有序的区域。有序区域目前只有一个元素。

下面是第2轮排序。

                               排序算法之冒泡排序1_排序算法_04

第二轮结束后,数列右侧的有序区有两个元素。

                               排序算法之冒泡排序1_排序算法_05

后续的交换和上述一样,就不细说了。

直至第7轮

                               排序算法之冒泡排序1_冒泡排序_06

冒泡排序是一种稳定排序,值相等的元素并不会打乱原本的顺序。由于该排序算法的每一轮都需要遍历元素,总共遍历(元素数量 - 1)轮,所以平均时间复杂度为O(n^2).

public static void sort(int array[]) {
    for(int i = 0; i < array.length - 1; i++) {
        for(int j = 0; j < array.length - i - 1;j++)
        {
           int temp  = 0;
           if(array[j] > array[j + 1])
           {
               temp = array[j];
               array[j] = array[j + 1];
               array[j + 1] = temp;
           }
        }
    }


    }



    public static void main(String[] args) {
    int[] array = new int[]{5, 8, 6, 3, 9, 2, 1, 7};
    sort(array);
    System.out.println(Arrays.toString(array));


    }


    

标签:int,元素,冒泡排序,算法,array,排序
From: https://blog.51cto.com/u_15912723/8572983

相关文章

  • ISP算法简述-BLC
    BlackLevelCalibration,黑电平矫正现象1)在纯黑条件下拍张图,你会发现像素值不为02)或者你发现图像整体偏色这些问题可能是黑电平导致的。原因存在黑电平的原因有2个:1)sensor的电路本身存在暗电流。暗电流主要产生在光电信号转换过程中,光电二极管受温度,电压稳定性等因素的干......
  • 基于HOG特征提取和GRNN神经网络的人脸表情识别算法matlab仿真,测试使用JAFFE表情数据
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述        该算法主要由两个部分组成:HOG特征提取和GRNN神经网络。下面将详细介绍这两个部分的原理和数学公式。 1.HOG特征提取      HOG(HistogramofOrientedGradients)是......
  • 基于FPGA的图像指数对比度增强算法实现,包括tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览      2.算法运行软件版本Vivado2019.2 matlab2022a 3.算法理论概述3.1图像指数对比度增强概述     图像指数对比度增强是一种常见的图像处理方法,主要是通过改变图像的像素值来增强图像的对比度。具体来说,它通常通过将原始图像......
  • 活动安排 贪心算法
    会议(活动)安排如题:思路:贪心算法假设现在有五组数据1.将活动按照结束时间递增排序2.当前安排的活动的结束时间小于等于下一个活动的开始时间ps:如果两个活动的结束时间相同,选择开始时间较晚的a13,5a21,4a21,4a13,5a30,6a30,6a45,7a45,7a53,8......
  • 文心一言 VS 讯飞星火 VS chatgpt (143)-- 算法导论12.1 3题
    三、用go语言,设计一个执行中序遍历的非递归算法。(提示:一种容易的方法是使用栈作为辅助数据结构;另一种较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否相等。)文心一言,代码正常运行:我们可以使用栈作为辅助数据结构来执行中序遍历的非递归算法。以下是用Go语言实现的代......
  • 文心一言 VS 讯飞星火 VS chatgpt (143)-- 算法导论12.1 3题
    三、用go语言,设计一个执行中序遍历的非递归算法。(提示:一种容易的方法是使用栈作为辅助数据结构;另一种较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否相等。)文心一言,代码正常运行:我们可以使用栈作为辅助数据结构来执行中序遍历的非递归算法。以下是用Go语言实现......
  • C++U3-第2课-基础排序(二)
    上节课作业讲师视频分享链接:百度云网盘链接:https://pan.baidu.com/s/1PFBLFdX6C-9FhKXWrhDBew?pwd=l8r3提取码:l8r3本节课教学目标 插入排序概念 插入排序的代码和思路分析  插入代码详细解释【题意分析】1.从第一个元素开始,该元素可以认为已经被排序;2.取出下......
  • 家长直呼太暴力!这些算法可能会被删除
    近日,洛谷网络科技有限公司多位用户家长向@kkksc03反映,部分算法存在血腥、暴力等不利于青少年儿童的因素出现,要求对相关算法进行整改或被删除。洛谷网络科技有限公司题目组管理员在接受采访时说道,在最近几天内,洛谷收到了数十条家长来信,声称网站教授的部分算法存在“血腥”、“暴......
  • 定义二维数组,冒泡排序法
    //#define_CRT_SECURE_NO_WARNINGS1////#include<stdio.h>//#include<stdlib.h>//#include<string.h>//#include<math.h>//voidbubble_sort(intarr[],intsz)//{// inti=0;// for(i=0;i<sz-1;i++)// {// intj=0......
  • 关于人工智能算法的深度思考(总结)
    1、神经元其实并不神奇,神奇的是它以某种相互联系的方式,可以在训练得到答案并核对答案后,立即对所走的路径上的权重进行更新(反向传播),更新的依据是答案误差大小,误差大则更新也大,误差小则更新就小。所走路径:所有单次训练被激活的神经元的组合。2、根据1,我们完全可以重新设计更好的神......