冒泡实现原理
冒泡排序是交换排序中最简单的排序方法,基本思想是两两比较相邻的关键码,若是反序就反过来交换。java
for(int i=0;i<arr.length-1;i++) { for(int j=0;j<arr.length-1;j++) { if(arr[j]>arr[j+1]) { temp=arr[j];//将下标为j的值赋值给temp arr[j]=arr[j+1];//再将下标为j+1的赋值给j arr[j+1]=temp; //再将temp的值赋值给arr[j+1] } }
用上以上代码基本就能够实现排序,可是这样会出现一个问题,可能排序已经完成了,但是程序依然要全部循环结束才中止,这样大大的浪费了时间和资源,怎么去规避这种状况呢?
咱们能够设置一个检测,当循环时发生了值交换,也就是执行markdown
if(arr[j]>arr[j+1]) { temp=arr[j];//将下标为j的值赋值给temp arr[j]=arr[j+1];//再将下标为j+1的赋值给j arr[j+1]=temp; //再将temp的值赋值给arr[j+1] }
就执行下一个循环,若是没有发生交换,就表示已经完成排序,就能够结束循环。
代码实现:atom
for(int i=0;i<arr.length-1;i++) { boolean flag=true; for(int j=0;j<arr.length-1;j++) { if(arr[j]>arr[j+1]) { temp=arr[j];//将下标为j的值赋值给temp arr[j]=arr[j+1];//再将下标为j+1的赋值给j arr[j+1]=temp; //再将temp的值赋值给arr[j+1] flag=false; } if(flag){ break; } }
完整代码
package com.list.test; import java.util.Arrays; public class MaoPao { public static void main(String[] args) { int[] arr= {3,5,54,12,47,59,26,6,584,422}; System.out.println(Arrays.toString(arr)); int temp=0; for(int i=0;i<arr.length-1;i++) { boolean flag=true; for(int j=0;j<arr.length-1;j++) { if(arr[j]>arr[j+1]) { temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; flag=false; } } if(flag){ break; } System.out.println(Arrays.toString(arr)); System.out.println("#####################"); } } }