java中氣泡排序與選擇排序的區別
初學java語言,排序演算法絕對是我們拿來實踐的好例子。而在排序中有兩種簡單的演算法是繞不開的,就是氣泡排序與選擇排序。下面來分別講解:
冒泡演算法:假設陣列長度為lenght,冒泡演算法的外迴圈為lenght-1,內迴圈則為相鄰的兩個數之間不斷比較,直到陣列末尾結束。其實現如下。
public static void main(String[] args) {
int[] arry=new int[]{15,67,26,43,61,25,84,80,34,70};
int temp;
int count=0;
for(int i=1;i<arry.length;i++){
for(int j=0;j<arry.length-i;j++){
if(arry[j]>arry[j+1]){
temp=arry[j];
arry[j]=arry[j+1];
arry[j+1]=temp;
}
}
}
System.out.println("處理後的資料:");
for(int k=0;k<arry.length-1;k++){
System.out.print(arry[k]+" ");
}
System.out.println("jiaohuan:");
System.out.println(count);
}
程式執行結果為:
處理後的資料:
15 25 26 34 43 61 67 70 80 jiaohuan:
45
選擇排序:假設陣列長度為lenght,選擇排序的外迴圈也是lenght-1,內迴圈則為使用第一個數與其他的數比較,得出一個最小的數,將最小數與陣列的第一個元素交換;第二次外迴圈,則用陣列的第二個數與第三到底lenght個數比較,找到其中的最小值,並將此最小值與陣列的第二個數交換,一直下去,直到陣列末尾。
程式如下所示:
public static void main(String[] args) {
int[] arry=new int[]{15,67,26,43,61,25,84,80,34,70};
int temp;
int count=0;
for(int i=0;i<arry.length-1;i++){
for(int j=i+1;j<arry.length-1;j++){
if(arry[j]>arry[j+1]){
temp=arry[j];
arry[j]=arry[j+1];
arry[j+1]=temp;
count++;
}
}
}
Arrays.sort(arry);
System.out.println("處理後的資料:");
for(int k=0;k<arry.length-1;k++){
System.out.print(arry[k]+" ");
}
System.out.println("jiaohuan:");
System.out.println(count);
}
程式執行結果為:
處理後的資料:
15 25 26 34 43 61 67 70 80 jiaohuan:
12
可以看到在java環境中選擇排序中數的交換次數比氣泡排序少了33次,如果資料量更大,目測兩者間的數的交換次數差距會更大,即演算法的效率差別更大。