应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

冒泡排序法(详解冒泡排序)

  冒泡排序法(详解冒泡排序)
  要点
  冒泡排序是一种交换排序。
  什么是交换排序呢?
  交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。
  算法思想
  它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
  这个算法的名字由来是因为越小的元素会经由交换慢慢浮到数列的顶端,故名。
  假设有一个大小为N的无序序列。冒泡排序就是要每趟排序过程中通过两两比较,找到第i个小(大)的元素,将其往上排。
  以上图为例,演示一下冒泡排序的实际流程:
  假设有一个无序序列{4。3。1。2,5}
  第一趟排序:通过两两比较,找到第一小的数值1,将其放在序列的第一位。
  第二趟排序:通过两两比较,找到第二小的数值2,将其放在序列的第二位。
  第三趟排序:通过两两比较,找到第三小的数值3,将其放在序列的第三位。
  至此,所有元素已经有序,排序结束。
  要将以上流程转化为代码,我们需要像机器一样去思考,不然编译器可看不懂。
  假设要对一个大小为N的无序序列进行升序排序(即从小到大)。
  (1)每趟排序过程中需要通过比较找到第i个小的元素。
  所以,我们需要一个外部循环,从数组首端(下标0)开始,一直扫描到倒数第二个元素(即下标N2),剩下最后一个元素,必然为最大。
  (2)假设是第i趟排序,可知,前i1个元素已经有序。现在要找第i个元素,只需从数组末端开始,扫描到第i个元素,将它们两两比较即可。
  所以,需要一个内部循环,从数组末端开始(下标N1),扫描到(下标i1)。
  核心代码publicvoidbubbleSort(int〔〕list){
  inttemp0;用来交换的临时数
  要遍历的次数
  for(inti0;ilt;list。length1;i){
  从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
  for(intjlist。length1;jgt;i;j){
  比较相邻的元素,如果前面的数大于后面的数,则交换
  if(list〔j1〕gt;list〔j〕){
  templist〔j1〕;
  list〔j1〕list〔j〕;
  list〔j〕temp;
  }
  }
  System。out。format(第d趟:t,i);
  printAll(list);
  }
  }
  冒泡排序算法的性能
  时间复杂度
  若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值:CminN1,Mmin0。所以,冒泡排序最好时间复杂度为O(N)。
  若初始文件是反序的,需要进行N1趟排序。每趟排序要进行Ni次关键字的比较(1iN1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
  CmaxN(N1)2O(N2)
  Mmax3N(N1)2O(N2)
  冒泡排序的最坏时间复杂度为O(N2)。
  因此,冒泡排序的平均时间复杂度为O(N2)。
  总结起来,其实就是一句话:当数据越接近正序时,冒泡排序性能越好。
  算法稳定性
  冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。
  所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
  优化
  对冒泡排序常见的改进方法是加入标志性变量exchange,用于标志某一趟排序过程中是否有数据交换。
  如果进行某一趟排序时并没有进行数据交换,则说明所有数据已经有序,可立即结束排序,避免不必要的比较过程。
  核心代码对bubbleSort的优化算法
  publicvoidbubbleSort2(int〔〕list){
  inttemp0;用来交换的临时数
  booleanbChangefalse;交换标志
  要遍历的次数
  for(inti0;ilt;list。length1;i){
  bChangefalse;
  从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
  for(intjlist。length1;jgt;i;j){
  比较相邻的元素,如果前面的数大于后面的数,则交换
  if(list〔j1〕gt;list〔j〕){
  templist〔j1〕;
  list〔j1〕list〔j〕;
  list〔j〕temp;
  bChangetrue;
  }
  }
  如果标志为false,说明本轮遍历没有交换,已经是有序数列,可以结束排序
  if(falsebChange)
  break;
  System。out。format(第d趟:t,i);
  printAll(list);
  }
  }
  完整参考代码packagenotes。javase。algorithm。sort;
  importjava。util。Random;
  publicclassBubbleSort{
  publicvoidbubbleSort(int〔〕list){
  inttemp0;用来交换的临时数
  要遍历的次数
  for(inti0;ilt;list。length1;i){
  从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
  for(intjlist。length1;jgt;i;j){
  比较相邻的元素,如果前面的数大于后面的数,则交换
  if(list〔j1〕gt;list〔j〕){
  templist〔j1〕;
  list〔j1〕list〔j〕;
  list〔j〕temp;
  }
  }
  System。out。format(第d趟:t,i);
  printAll(list);
  }
  }
  对bubbleSort的优化算法
  publicvoidbubbleSort2(int〔〕list){
  inttemp0;用来交换的临时数
  booleanbChangefalse;交换标志
  要遍历的次数
  for(inti0;ilt;list。length1;i){
  bChangefalse;
  从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
  for(intjlist。length1;jgt;i;j){
  比较相邻的元素,如果前面的数大于后面的数,则交换
  if(list〔j1〕gt;list〔j〕){
  templist〔j1〕;
  list〔j1〕list〔j〕;
  list〔j〕temp;
  bChangetrue;
  }
  }
  如果标志为false,说明本轮遍历没有交换,已经是有序数列,可以结束排序
  if(falsebChange)
  break;
  System。out。format(第d趟:t,i);
  printAll(list);
  }
  }
  打印完整序列
  publicvoidprintAll(int〔〕list){
  for(intvalue:list){
  System。out。print(valuet);
  }
  System。out。println;
  }
  publicstaticvoidmain(String〔〕args){
  初始化一个随机序列
  finalintMAXSIZE10;
  intarraynewint〔MAXSIZE〕;
  RandomrandomnewRandom;
  for(inti0;ilt;MAXSIZE;i){
  array〔i〕random。nextInt(MAXSIZE);
  }
  调用冒泡排序方法
  BubbleSortbubblenewBubbleSort;
  System。out。print(排序前:t);
  bubble。printAll(array);
  bubble。bubbleSort(array);
  bubble。bubbleSort2(array);
  System。out。print(排序后:t);
  bubble。printAll(array);
  }
  }
  运行结果

销量最好的车(今年销量最好的10台车!)销量最好的车(今年销量最好的10台车!)就2020年度汽车销量数据来看,整个乘用车市场拿到1999。4万辆销量,其中SUV达到939。9万辆,轿车则为918。9万辆,MPV车型仅有周一祝福语(周一让人心情好的祝福)周一祝福语(周一让人心情好的祝福)一这个世界,对着你笑的人太多太多。真心包容你的,太少太少。周一加油,那个谁!二新的一周又开始了,祝你度过轻松星期一,快乐星期二,幸运星期三,温馨星马拉松4小时什么水平(马拉松pb啥意思)马拉松成绩跑进4小时在跑圈是个什么样的水平呢?在马拉松蓝皮书上出炉了去年马拉松平均完赛成绩,在去年的马拉松中,全马男子和女子平均成绩分别为042211和044158。所以,马拉松能马增蕙去世(马增蕙和侯宝林什么关系)马增蕙去世(马增蕙和侯宝林什么关系)2月4日,媒体爆料著名单弦表演艺术家马增蕙去世!享年85岁,具体去世原因暂时并未曝光,但她的代表作却让大家非常熟悉,很多8070后都对她的作品印张宝林照片(张宝林真人图片)张宝林照片(张宝林真人图片)有人说电视剧征服里面的刘华强,是中国地痞流氓最经典的形象。他残忍,凶恶,心肠歹毒,做事不顾一切,但又颇讲义气,善于用头脑,是一个不可小视的黑帮分子。其实哈哈镜花缘(镜花缘动画片58集)哈哈镜花缘(镜花缘动画片58集)中国作为历史悠久的文明古国,流传至今的文学经典名著数不胜数。将文学名著改编成影视动画,可以更好地宣传和推广传统文化。我国四大名著西游记红楼梦三国演义官方通报老人被狗绳绊倒后身亡这两天关于官方通报老人被狗绳绊倒后身亡在网上的热度是非常高的,很多网友们也都是非常关注官方通报老人被狗绳绊倒后身亡这个事情,为此小编也是在网上进行了一番搜索查阅相关的信息,那么如果老人被狗绳绊倒摔地后身亡官方通报来了近日老人被狗绳绊倒摔地后身亡登录了热搜,也在网上引起了网友们的关注,那么很多小伙伴可能还不清楚具体的情况如何,小编也是在网上查阅了一些信息,那么接下来就分享给大家来了解下老人被狗绳学生疑遭体罚后死亡涉事教师已停课老师体罚学生其实很多学校多对发生的事情,体罚程度较轻的话也很少有人去举报,但是近日四川一小学生被老师体罚后身亡,这个消息在网络上引发了众多网友对体罚的关注,根据官方最新报道学生疑遭5。9秒油电怪兽LexusGS450h取撷LFGH概念车设计灵感12。3吋超大液晶显示萤幕EcoNormalSportSSportS四种驾驶模式国内售价预估290310万元(GS450h)国内上市日期预计2012年第2李现追星BLACKPINK关于到现在李现追星BLACKPINK这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道李现追星BLACKPINK,小编也是到
EVOX改到没东西改了吗?比照WRCYaris超短轴距图片来源MitsuruKOTAKE2019年赛季开始,全日本DirtTrial(非铺装路面)选手权的战况可以说是群雄割据,虽然登录的车辆数高达20台,但截至目前为止的7站中,就已经日规改欧规还加个涡轮MAZDAMX5ND改500hp图片来源wedoption人类真是一种很奇妙的动物,从玩车人身上就可看到端倪,MX5ND车型在日规及海外输出版本上,最大的差异就在于引擎本体的配置,以位于日本海外的我们来说,总是听EVO欧规掀背版MitsubishiPrototypeS这里最强进军欧洲市场的钢砲王,搭载2。0Turbo引擎六速自手排与AWD。这辆车是欧规Lancer掀背的原型车,也延续之前05年法兰克福车展的SportbackConcept设计,系列战将Hyundai2011年引进车款预告Hyundaii10小改Onsale2011年第二季引进在巴黎车展发表的i10Facelift车型,在外观上换上新一代Hyundai家族风格的六角盾型水箱罩与气坝,让这款都会小车风直挑霸主国产MitsubishiOutlander三月开卖虽然没有说清楚讲明白,不过明眼人都看得出来,MitsubishiOutlander无论外观设计内装风格动力配置皆是直指HondaCRV而来,这场指名单挑的戏码已不再是纸上谈兵,就在操控佳越野行MITSUBISHIOUTLANDER据MITSUBISHIMOTOR表示,国产OUTLANDER在上市后的短短两週内,已经接单超过1250张。这验证了两件事,一是买家识货二是OUTLANDER产品力真的是不错!套用咱Mitsubishi提前公布2014年式美规Outlander近期内由于大型车展逼近的缘故,使得许多品牌纷纷在展前针对旗下重点车款放出消息,2014年式美规MitsubishiOutlander便是其中一员。从原厂图上,可以发现此大改款的全新休旅新星报到MitsubishiOutlander区分2WD4WD以及5人7人车型4WD顶级5人7人标配7具气囊ACC主动车距控制巡航系统入列国内售价(接单价)2WD雅緻时尚华贵81。990。998。9万4WD经典进阶尊荣94。9快乐童年陶子全家与MitsubishiOutlander关掉电视,亲近大自然有人说网路世代的孩子命好,因为吃好穿好玩得好。但是仔细观察却发现眼镜族小胖族的比例创新高小小年纪已经拖着行李箱上学抵抗力不够容易挂病号满满的才艺课却很少为孩子的久违国产手排涡轮LUXGEN5SedanM上市文Eric图Tree协力纳智捷LUXGEN已经回想不起来,国产房车市场有多久没有推出涡轮增压Turbo手排新车了?本月纳智捷在众所期待之下正式推出LUXGEN5SedanM涡轮增压国内新车三菱超Zinger真有那么Super?911这一天令人印象深刻,撇开挥之不去的阴霾,中华三菱就选在这天发表搭载全新4G69MIVEC2。4升引擎的SuperZinger!以同级最省油最大动力最大空间hellip等等的优
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网