首页 > 编程知识 正文

java冒泡排序两种,java冒泡排序从大到小

时间:2023-05-06 19:12:45 阅读:168627 作者:293

基本思想

气泡排序(Bubble Sort )使排序顺序从前到后(从下标小的要素开始),依次比较相邻要素的值,如果知道逆序(前后的大小与要求的顺序不一致)则进行交换,值大的要素从前到后

代码实现

public class BubbleSort { /** *从小到大排序* @param array要排序的数组*/publicstaticvoidbubblesort (int [ ] array ) { int temp=0 //用于前后要素的交换时//数组中有n个要素,排序由n-1次完成的for(intI=0; i array.length-1; I ) for(intj=0; j array.length-1-i; j () if ) array[j]array[j1] ) /通过交换前后元素,冒泡的算法被交换为交换算法temp=array[j]; array[j]=array[j 1]; array[j 1]=temp; } } } }}代码说明:

测试序列: int [ ] array={ 23,9,-2,- 1,8,99,100,91 };

执行结果:

算法优化

可以从上面每趟的输出结果中看到,第二次排序完成后,整个数组按从小到大的顺序排列,之后的几个循环只是执行if语句,实际上没有排序。 浪费了时间和空间

优化:

int temp=0; //用于前后要素的交换时boolean isChanged=false; //识别变量,记录数组是否提前排序完成//数组有n个元素,排序n-1次即可完成(intI=0; i array.length-1; I ) for(intj=0; j array.length-1-i; j () if ) array[j]array[j1] ) { isChanged=true; //证明元素被替换,即数组还没有完全有序的temp=array[j]; array[j]=array[j 1]; array[j 1]=temp; }if (! ischanged({break; //左/右元素未互换,表示数组排序已完成,排序循环已完成(} System.out.printf ) '第%d次排序结果',i 1 ); system.out.println (arrays.tostring (array ) ); isChanged=false; //复位,用于下次判断,该复位非常重要}执行结果:

for循环只执行了两次就结束了,可以看到数组排序完成了

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。