冒泡實現原理
冒泡排序是交換排序中最簡單的排序方法,基本思想是兩兩比較相鄰的關鍵碼,若是反序就反過來交換。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("#####################"); } } }