一、執行個體說明
本執行個體是利用Java實現一個非常簡單的排序演算法------冒泡演算法。在任何規模的軟體程式設計當中都會經常用到排序演算法,比如在案頭工具軟體中,在管理資訊系統中,以及在工業統計和科學計算中都會大量用到排序演算法。通過本節介紹的編程執行個體,讀者可以加深對本章所講的Java語言基礎的認識,鞏固所學的知識。
二、基礎知識點
1.冒泡排序基本思想
冒泡排序的思想很簡單。假設有n個數位數列,要實現從小到大排序。首先將第一個數字和第二個數字進行比較,如果第一個數比第二個數大,則將兩個數交換,然後比較第二個數和第三個數,依次類推,直至第n-1個數和第n個數進行比較為止。上述過程稱作第一趟冒泡排序,這樣第一趟結束時第n個數就是所有數列中最大的數,就好像水中冒出的氣泡一樣,最大的數也會向前“漂浮”。然後進行第二趟排序,對前n-1個數進行同樣的操作,其結果使得第二大的數安置到了第n-1個數的位置上。冒泡排序樣本如下:
初始的時候: 49 38 65 97 76 13 27 49
第一趟排序後:38 49 65 76 13 27 49 97
第二趟排序後:38 49 65 13 27 49 76 97
第三趟排序後:38 49 13 27 49 65 76 97
第四趟排序後:38 13 27 49 49 65 76 97
第五趟排序後:13 27 38 49 49 65 76 97
第六趟排序後:13 27 38 49 49 65 76 97
第七趟排序後:13 27 38 49 49 65 76 97
從以上可以看出每一趟冒泡排序都可以選出一個最大的數放在最後面,這樣如果有n個數要排序,頂多進行n-1趟排序就夠了。細心的讀者會發現其實第六趟排序沒有交換任何數字,整個數列已經是按照從小到大的順序排列了,就是說第七趟排序是多餘的。那麼怎樣在程式中判斷何時排序可以結束呢?有興趣的讀者可以利用本章學到的知識進一步改進冒泡演算法。
2.for迴圈結構
在排序演算法中需要用到for迴圈結構,在這裡有必要再鞏固一下:
for(initexpr1;testexpr2;incrementexpr3)
{
statements;
}
3.if判斷語句
if/else分支結構:
if(boolean)
{
statements;
}
else
{
statements;
}
三、技術要點
1.Java數組
數組元素就相當於一個變數。在本節的執行個體中需要利用數組記錄排序以前的數列和排序以後的數列。一個具有8個元素的整型數組定義格式:
int a[]=new int[8];
2.數值交換
數值交換在程式設計中是很常用的,希望初學者能夠掌握。如果要求a與b實現交換,那麼必須引出一個臨時變數c起到中介的作用,寄存a的值。交換部分的代碼如下:
c=a;
a=b;
b=c;
3.迴圈
利用for迴圈語句進行每趟大小的比較。
for ( int i = 0; i<=7; i++)
{
}
四、實現步驟
首先建立一個類,命名為Sort.java,在Sort.java檔案中鍵入下列代碼:
public class Sort {
public Sort() {
}
public static void main(String[] args) {
Sort sort1 = new Sort();
int a[] = new int[8];
a[0] = 49;
a[1] = 38;
a[2] = 65;
a[3] = 97;
a[4] = 76;
a[5] = 13;
a[6] = 27;
a[7] = 49;
int tmp; //定義臨時變數,作為寄存器
for (int i = 0; i <= 7; i++) {
for (int j = 0; j < 7 - i; j++) { //以下進行每趟排序
if (a[j] > a[j + 1]) { //比較大小,交換
tmp = a[j + 1];
a[j + 1] = a[j];
a[j] = tmp;
}
}
}
//將比較完成的結果列印出來
for (int i = 0; i <= 7; i++) {
System.out.print(a[i] + ";");
}
}
}
五、歸納總結
上述執行個體,主要體現了Java最基礎的知識,排序演算法本身並不是重點。但無論是變數賦值的基本用法,還是for及if等控制語句的靈活運用,Java程式的基本結構,都是編程必備的最基礎的知識。必須要認真體會和熟練掌握。