冒泡排序java
阿新 • • 發佈:2017-08-11
dem 位置 ble system out args 簡單 clas align
一、最簡單粗暴的排序
思想為:讓每一個關鍵字都和它後邊的每一個關鍵字比較,
如果大則交換,這樣第一個位置的關鍵字在一次循環後一定變為最小值。
1 package demo01; 2 3 class BubbleSort01 { 4 public static void main(String[] args) { 5 int[] n = {0,5,2,6,9,3,4,8,1,10,82,100,52,35,46,7}; 6 int i,j; 7 for(int x=1;x<n.length;x++){ 8 System.out.print(n[x] + "、");9 } 10 System.out.println(""); 11 12 for(i=1;i<n.length;i++){ 13 for(j=i+1;j<n.length;j++){ 14 if(n[i]>n[j]){ 15 int temp = n[i]; 16 n[i] = n[j]; 17 n[j] = temp; 18 }19 } 20 } 21 22 for(int x=1;x<n.length;x++) 23 System.out.print(n[x]+ "、"); 24 } 25 }
二、正宗的冒泡排序
思想:
當外循環為1(循環變量i=1),內循環(變量j)由大到小,兩兩比較,
將較小值換到前面,之道最小值放到最前面;開始下一次循環(i=2),一次類推…………
1 package demo01; 2 3 class BubbleSort02 { 4 public staticvoid main(String[] args) { 5 int[] n = {0,5,2,6,9,3,4,8,1}; 6 int i,j; 7 for(int x=1;x<n.length;x++){ 8 System.out.print(n[x] + "、"); 9 } 10 System.out.println(""); 11 12 for(i=1;i<n.length;i++){ 13 for(j=n.length-1;j>=2;j--){ 14 if(n[j]<n[j-1]){ 15 int temp = n[j]; 16 n[j] = n[j-1]; 17 n[j-1] = temp; 18 } 19 } 20 } 21 22 for(int x=1;x<n.length;x++) 23 System.out.print(n[x]+ "、"); 24 } 25 }
三、優化的冒泡排序算法
思想:在上述算法二的基礎上,對交換數據的步驟進行標記,即,如果發生了數據交換,標記的值就會變化。
當某次外循環進行時,標記位的值始終不變,說明此次循環沒有發生值的交換,即說明已經排序完成。
1 package demo01; 2 3 class BubbleSort03 { 4 5 public static void main(String[] args) { 6 int[] n = {0,5,2,6,9,3,4,7,8,1}; 7 8 for(int x=1;x<n.length;x++){ 9 System.out.print(n[x] + "、"); 10 } 11 System.out.println(""); 12 13 int i,j; 14 boolean flag = true; //flag作為標記 15 for(i=1;i<n.length && flag;i++){ 16 flag = false; //初始化flag 17 for(j=n.length-1;j>=2;j--){ 18 if(n[j]<n[j-1]){ 19 int temp = n[j]; 20 n[j] = n[j-1]; 21 n[j-1] = temp; 22 flag = true; 23 } 24 } 25 } 26 27 for(int x=1;x<n.length;x++) 28 System.out.print(n[x]+ "、"); 29 } 30 }
冒泡排序java