当前位置: 首页 > 科技观察

Java实现冒泡排序

时间:2023-03-16 10:03:13 科技观察

冒泡排序:算法反复访问待排序的序列,一次比较两个元素,如果顺序不对就交换它们的位置,让最大的排到最后,并且重复操作可以得到有效的序号列。冒泡排序算法通过以下方式运行:比较相邻元素。如果第一个大于第二个,则交换它们。对每对相邻元素执行相同的操作,从开头的第一对到结尾的最后一对。此时,最后一个元素应该是最大的数。对除最后一个元素之外的所有元素重复上述步骤。每次对越来越少的元素继续重复上述步骤,直到没有要比较的数字对。代码实现:publicstaticvoidmain(String[]args){int[]values={3,1,6,2,9,0,7,4,5,8};bubbleSort(values);System.out.println(Arrays.toString(values));}publicstaticvoidbubbleSort(int[]values){inttemp;for(inti=0;ivalues[j+1]){temp=values[j];values[j]=values[j+1];values[j+1]=temp;}}}}但是上面代码有不足之处,优化如下:冒泡排序的优化算法是基于冒泡排序的以下特点:(帮助理解)将整个序列分为两部分:前面是无序序列,和后面是一个有序的序列。在初始状态下,整个数组是无序的,有序数组为空。每次循环让无序序列中最大的数排到最后,(即有序序列中的元素个数加1),即不需要考虑有序序列。每次循环从序列的第一个元素开始比较,依次比较相邻的两个元素,比较到无序序列的末尾(不是序列的末尾);如果前一个大于后者,交换。确定数组元素的交换是否在每次传递中发生。如果不是,说明此时数组已经有序了,后面的pass次数就不用再比了。此时可以中止比较。publicstaticvoidbubbleSort(int[]values){inttemp;inti;//外层循环:对n个元素进行排序,至多需要n-1次循环for(i=0;ivalues[j+1]){temp=values[j];values[j]=values[j+1];values[j+1]=temp;//本次行程发生Swapping,说明本次行程数组处于无序状态,需要继续比较;即只要有exchange,就会falseflag=false;}}//根据flag的值判断数组是否有序,若有序则退出;如果它是无序的,则继续循环。if(flag){break;}}}本文授权转载自公众号「良墟Linux」。世界500强外企Linux开发工程师梁旭,在公众号分享大量Linux干货,欢迎关注!