冒泡排序的實現及優化

冒泡實現原理

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

}
相關文章
相關標籤/搜索