经典排序算法(1)——冒泡排序算法详解 - CSDN博客

文章推薦指數: 80 %
投票人數:10人

冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。

一、算法基本思想(1)基本思想冒泡排序的基本思想就是:从无序 ... 经典排序算法(1)——冒泡排序算法详解 郭威gowill 于 2016-03-1610:52:26 发布 128448 收藏 251 分类专栏: 数据结构和算法 文章标签: 排序算法 冒泡排序 版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/guoweimelon/article/details/50902597 版权 数据结构和算法 专栏收录该内容 20篇文章 4订阅 订阅专栏 冒泡排序(BubbleSort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。

一、算法基本思想 (1)基本思想 冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。

算法的核心在于每次通过两两比较交换位置,选出剩余无序序列里最大(小)的数据元素放到队尾。

(2)运行过程 冒泡排序算法的运作如下: 1、比较相邻的元素。

如果第一个比第二个大(小),就交换他们两个。

2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。

这步做完后,最后的元素会是最大(小)的数。

3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。

4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。

(3)示例 二、算法实现(核心代码) C++实现: voidbubble_sort(intarr[],intlen){ inti,j; for(i=0;iarr[j+1]) swap(arr[j],arr[j+1]); } Java实现: publicstaticvoidbubble_sort(int[]arr){ inti,j,temp,len=arr.length; for(i=0;iarr[j+1]){ temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } 三、算法改进和变种 (1)设置标志变量change 标志变量用于记录每趟冒泡排序是否发生数据元素位置交换。

如果没有发生交换,说明序列已经有序了,不必继续进行下去了。

voidbubble_sort(intarr[],intlen){ inti,j,change=1; for(i=0;iarr[j+1]) { swap(arr[j],arr[j+1]); change=1; } } } (2)鸡尾酒排序 鸡尾酒排序又叫定向冒泡排序,搅拌排序、来回排序等,是冒泡排序的一种变形。

此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。

鸡尾酒排序在于排序过程是先从低到高,然后从高到低;而冒泡排序则仅从低到高去比较序列里的每个元素。

它可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。

以序列(2,3,4,5,1)为例,鸡尾酒排序只需要从低到高,然后从高到低就可以完成排序,但如果使用冒泡排序则需要四次。

但是在乱数序列的状态下,鸡尾酒排序与冒泡排序的效率都很差劲。

voidcocktail_sort(intarr[],intlen){ intj,left=0,right=len-1; while(leftarr[j+1]) swap(arr[j],arr[j+1]); right--; for(j=right;j>left;j--) if(arr[j-1]>arr[j]) swap(arr[j-1],arr[j]); left++; } } 四、性能(算法时间、空间复杂度、稳定性)分析 (1)时间复杂度 在设置标志变量之后: 当原始序列“正序”排列时,冒泡排序总的比较次数为n-1,移动次数为0,也就是说冒泡排序在最好情况下的时间复杂度为O(n); 当原始序列“逆序”排序时,冒泡排序总的比较次数为n(n-1)/2,移动次数为3n(n-1)/2次,所以冒泡排序在最坏情况下的时间复杂度为O(n^2); 当原始序列杂乱无序时,冒泡排序的平均时间复杂度为O(n^2)。

(2)空间复杂度 冒泡排序排序过程中需要一个临时变量进行两两交换,所需要的额外空间为1,因此空间复杂度为O(1)。

(3)稳定性 冒泡排序在排序过程中,元素两两交换时,相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

郭威gowill 关注 关注 73 点赞 踩 2 评论 251 收藏 打赏 扫一扫,分享内容 点击复制链接 专栏目录 经典算法之冒泡算法 zhangxing 11-20 920 前言 冒泡算法是一种经典的排序算法,在大学起初学习C语言的时候,冒泡算法是笔者接触编程的第一个算法。

冒泡,顾名思义就是轻(小)的往上冒,重(大)的往下沉,也称鸡尾酒算法。

算法解析 首先我们需要确立两层嵌套for循环,第一层for循环主要控制总体循环的趟数,第二层for循环主要是比对相邻的两个数,运用CAS的思路将每一趟的第二层for循环执行完成,就会将一个最大的数沉到最下面。

来张图,理解效果会更佳! 算法实战 publicclassBubbleSort{ publicstatic 冒泡排序(超详细) 热门推荐 hcz666的博客 06-11 16万+ 1、什么是冒泡排序? 冒泡排序的英文BubbleSort,是一种最基础的交换排序。

之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。

冒泡排序的原理: 每一趟只能确定将一个数归位。

即第一趟只能确定将末位上的数归位,第二趟只能将倒数第2位上的数归位,依次类推下去。

如果有n个数进行排序,只需将n-1个数归位,也就是要进行n-1趟操作。

而“每一趟”都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位继续比较下面 评论 2 您还未登录,请先 登录 后发表或查看评论 简单算法6--冒泡算法 power_guoxinzhao的专栏 01-11 91 说起冒泡算法,很多程序员都不陌生,对于老程序员就当温故概念和代码了。

新程序员可以借鉴一下。

冒泡排序基本思路:对未排序的各个元素从头到尾依此比较相邻的两个元素是否逆序(与欲排顺序相反),若逆序就交换这两元素,经过第一轮比较排序后便可把最大(或者最小)的元素拍好,然后再用同样的方法把剩余元素逐个进行比较,就得到所要的顺序。

冒泡排序效率,使用大O表示法,比较和交换次数都是N的平方。

比较过程图... 冒泡排序(详解) weixin_45796387的博客 12-12 5315 冒泡排序 冒泡排序(BubbleSort),是一种计算机科学领域的较简单基础的排序算法。

其基本思路是,对于一组要排序的元素列,依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面,如此继续,直到比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

冒泡排序算法的原理如下: 假设一共有M个元素需要排序,比较相邻 【算法】冒泡算法 dodobibibi的博客 02-12 86 冒泡算法(英语:Bubblesort)是一种简单的排序算法。

它重复的遍历要排序的数列,一次比较两个元素,如果它们的顺序错误,就把它们交换过来。

遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序算法的运作如下: 比较相邻的元素。

如果第一个比第二个大(升序),就交换他们两个。

对每一对相邻元素做同... 冒泡排序算法 qq_44111805的博客 01-31 3万+ 一、冒泡排序算法基本思想 将第一个元素和第二个元素进行比较,若为逆序则将两个元素交换,然后比较第二个元素和第三个元素。

依次类推,直至第n-1个元素和第n个元素进行比较为止。

上述过程称为第一趟冒泡排序,其结果使最大值元素被放置在最后一个位置(第n个位置)。

然后进行第二趟冒泡排序,对前n-1个元素进行同样操作,其结果是使第二大元素被放置在倒数第二个位置上(第n-1个位置)。

二、冒泡排序图解 黄色表示已排序部分,蓝色表示未排序部分。

三、代码实现 packageSort; importjava C语言——冒泡排序 最新发布 记录学习点滴 03-13 2万+ 冒泡排序的原理是:从左到右,相邻元素进行比较。

每次比较一轮,就会找到序列中最大的一个或最小的一个。

这个数就会从序列的最右边冒出来。

以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。

代码如下 #include voidBBsort(intarr[],intsize) { intj,i,tem; for(i=0;i.. 冒泡法 duan179的博客 03-22 1万+ 冒泡法   冒泡法的思路是:每次将相邻的两个数作比较,把较小的调到前头。

若有9个数a[0]~a[8]依次为9-3-1-4-2-7-8-6-5. 第一趟:   a[0]和a[1]比较,9>3,互换位置,序列变成3-9-1-4-2-7-8-6-5;   a[1]和a[2]比较,9>1,互换位置,序列变成3-1-9-4-2-7-8-6-5;   a[2]和a[3]比较,9>4,互换... 冒泡算法讲解 美丽的泡沫 08-30 1万+ 临近的两个元素进行比较,然后互换顺序,一趟走完之后最大的或者最小的元素排在第一个或者最后一个位置(最大或者最小看实际需求),给的的感觉就是一个小泡泡一直冒啊冒,所以有个好听的名字叫冒泡算法 举个例子,有数组[10,1,18,30,23,12,7,5,18,17],我们使用从小到大的排序方法 第一趟,外排下标为0,对应的值为10 内排开始 ①下标0和下标1的值进行比较。

10... c语言冒泡排序详解 qq_61235012的博客 01-24 2751 冒泡排序是什么?先看看书上的定义 说真的,这本书对新手来说一点都不友好,新手只要看第一句话就行,继续看下去他除了迷惑你之外一点用处都没有,生怕你学会一样。

没错,这段代码没有注释,要是注释有用的话还要人讲干嘛?并且也不用函数调用什么的,只是讲冒泡的一个思维。

首先头文件会写吧?主函数会写吧?数组会定义并且会写9到0吧? 这个程序的目的是从小到大排序知道吧? 先从两个for循环开始讲(两个for的时候内层的for先执行完,外层的for才会加+1,怕有些人不知道) 第一个for定. 算法篇----冒泡算法 weixin_38725737的博客 08-19 2711 算法这条路,是自己目前下定决心去学习,所以,不管遇到多少困难,都希望自己能够坚持下去!还有一年即将面临择业,望付出自己的努力。

嘿嘿,不矫情,开始正式的讲解。

—–雷钝 冒泡排序 冒泡排序就是像自然中冒泡的现象一样,把数据排好序。

解释... 冒泡排序 一个程序员的修炼之路 08-27 5万+ 渐渐的到了校园招聘的时候,楼主的算法功底实在是不敢恭维;上不及数据挖掘、模式识别、机器学习等高级算法,也只有加强好自己的基本功了,对数据结构和算法书上的基本的算法做分析和实现;就先从排序算法开始吧,本文主要分析楼主学到的第一个冒泡排序算法。

一.算法描述   冒泡排序:依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第 冒泡算法(BubbleSort) 浮而不实的博客 06-12 757 冒泡算法核心就是遍历数组,从头或者尾部开始比较大小,从头部比较的话(升序)将大的换到右边,从头开始,遍历一次就是将数据最大的放在最后边,然后第二遍遍历就是将第二大放在右边第二的位置。

遍历结束是完整遍历没有交换。

例子如图: 235164初始数组 231546第一次遍历结束。

最大的6在最后边 213456第二次遍历结束。

第二大5在右边 123456第三次遍历结束。

发现已经遍历完成 123456第四次遍历结束。

这次 C语言———冒泡算法 weixin_51871601的博客 07-21 2935 一:冒泡算法是怎么样去对一堆无序数字进行排序的? 1.首先我先说明一下冒泡排序的特点:冒泡排序特点就是每一趟排序把最大的数字找出来并且同时放在最后。

这样通过有限次的排序后,有限-无序-序列的数字就会被排序成有序序列。

2.那么冒泡算法是如何对数字进行排序的呢? 概念:以第一个数字为首,与后面第二个数字进行比较,如果第一个数字比第二个数字大,那么就把第一个数字与第二个数字的位置进行交换,否则该数字位置不变。

然后第二个数字又与第三个数字进行比较,如果第二个数字大于第三个数字的话,则第二个数字与第三个数字进 漫画:什么是冒泡排序? CSDN资讯 07-23 5073 —————当天上午—————什么是冒泡排序?冒泡排序的英文BubbleSort,是一种最基础的交换排序。

大家一定都喝过汽水,汽水中常常有许多小小的气泡,哗啦哗啦... 冒泡算法简述 WANUENZEZE的博客 09-10 799 冒泡算法: 简单来说,冒泡算法就是让数组内的元素进行排序的。

原理:用例子来说明原理((•̀ω•́)✧绝对不是我懒哦~) //冒泡算法 //用题来举例子 //使用数组保存382101517并从大到小进行排序 publicstaticvoidmain(String[]args){ int[]num={3,8,2,10,15,17}; for(inti=0;i.比较相邻的元素。

如果第一个比第二个大,就交换它们两个; <2>.对每一对相邻元素作同样的工作,从开始第一... “相关推荐”对你有帮助么? 非常没帮助 没帮助 一般 有帮助 非常有帮助 提交 ©️2022CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页 郭威gowill CSDN认证博客专家 CSDN认证企业博客 码龄11年 暂无认证 87 原创 4万+ 周排名 89万+ 总排名 96万+ 访问 等级 6152 积分 322 粉丝 725 获赞 110 评论 1790 收藏 私信 关注 热门文章 经典排序算法(1)——冒泡排序算法详解 128428 Java连接Mysql数据库警告:EstablishingSSLconnectionwithoutserver'sidentityverificationisnotrecommend 87514 Linux下管理员权限获取(su和sudo的区别) 78058 堆树(最大堆、最小堆)详解 52560 Cookie和Session的作用和工作原理 42114 分类专栏 Flag 1篇 Linux/Unix 7篇 Max(OSX) 4篇 操作系统原理 11篇 计算机网络原理 19篇 数据结构和算法 20篇 Java基础知识 27篇 Java虚拟机 4篇 JavaEE框架 3篇 Android开发 .NET(C#,ASP.NET) 1篇 数据库(MySQL,SQLServer) 2篇 WebService 10篇 Maven 1篇 最新评论 JavaHashSet的实现原理详解 野蛮小弟弟: 所以说为什么会不相等你明白了吧,不按照规定来就会失败 JavaHashSet的实现原理详解 智障儿童,欢乐多: 重写equls不重写hashcode那就是你的问题了 TCP连续ARQ协议和滑动窗口协议 代码&世界: 写得很棒,逻辑清晰 JavaHashSet的实现原理详解 野蛮小弟弟: 我重写equals不重写hashcode你觉得还相同吗 TCP连续ARQ协议和滑动窗口协议 Jasonloe: 应该是确认到那个分组就滑动几个。

您愿意向朋友推荐“博客详情页”吗? 强烈不推荐 不推荐 一般般 推荐 强烈推荐 提交 最新文章 Servlet详解 JavaBIO、NIO、AIO的区别 JVM(4)——对象访问 2016年94篇 2015年2篇 目录 目录 分类专栏 Flag 1篇 Linux/Unix 7篇 Max(OSX) 4篇 操作系统原理 11篇 计算机网络原理 19篇 数据结构和算法 20篇 Java基础知识 27篇 Java虚拟机 4篇 JavaEE框架 3篇 Android开发 .NET(C#,ASP.NET) 1篇 数据库(MySQL,SQLServer) 2篇 WebService 10篇 Maven 1篇 目录 打赏作者 郭威gowill 你的鼓励将是我创作的最大动力 ¥2 ¥4 ¥6 ¥10 ¥20 输入1-500的整数 余额支付 (余额:--) 扫码支付 扫码支付:¥2 获取中 扫码支付 您的余额不足,请更换扫码支付或充值 打赏作者 实付元 使用余额支付 点击重新获取 扫码支付 钱包余额 0 抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。

2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值



請為這篇文章評分?