今天,一起學習一下java中非常重要的內容:數組和冒泡排序。
我們首先看一下數組的定義:
1.可存儲相同數據類型數據於連續的存儲單元中;
2.可通過指定數組的名稱和長度來聲明數組;
3.一旦聲明大小,不可更改;
4.數組元素可以通過數組名和索引來進行訪問(注:目前可以這樣理解:存入的每一個數據就是一個元素;java中索引從0開始,即第一個元素的索引是0,第二個元素的索引是1)
5.數組可以是一維數組,也可以是多維(即數組的元素是數組)
示例:
public static void main(String[] args) {
int[] arr;//聲明數組名
arr =new int[5];//聲明數組大小,當然這兩步可以合併爲一步,此處只爲更好理解
arr[0]=1;//爲數組添加元素
arr[1]=2;
arr[2]=3;
arr[3]=4;
arr[4]=5;
System.out.println("索引爲2的元素是:"+arr[2]);//字符串拼接使用“+”
}
運行結果:索引爲2的元素是:3。
示例2:
public static void main(String[] args) {
int arr[] = new int[]{1,2,3,4,5};//定義數組
System.out.println(arr[2]);//取下角標是2的元素(第三個)
}
遍歷數組的兩種常用方式
方式一:for循環遍歷,示例如下:
public static void main(String[] args) {
int arr[] = new int[]{1,2,3,4,5};//定義數組
for (int i = 0; i < arr.length; i++) {//arr.length爲內置函數,可以得到數組arr的長度(一個元素算一個)
System.out.println("第"+(i+1)+"個元素是:"+arr[i]);//字符拼接,i從零開始,下角標也是
}
}
方式二:增強for循環
展示案例之前先看一下語法:
for(類型 變量名 : 集合或者數組)
在快捷鍵提示下顯示的內容是foreach
看一下示例代碼:
public static void main(String[] args) {
int arr[] = new int[]{1,2,3,4,5};//定義數組
for (int i : arr) {//因爲定義的是int類型數組,所以此處的類型要寫int,其他類型同理
System.out.println("第"+(i+1)+"個元素是:"+arr[i]);
}
}
下面我們將講解一個比較經典也比較簡單的算法——冒泡排序:
在開始講解之前,先請大家看一段魔性的舞蹈。
大家通過舞蹈可以看出,我們在排序的時候並不能一口氣讓所有的數據都排排坐,吃果果。每次只能找出一個最大或者最小的元素,安排妥當。原理如下:
冒泡排序算法的運作如下:(從後往前)
-
比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
-
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
-
針對所有的元素重複以上的步驟,除了最後一個。
-
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
下面我們將在代碼中體現這一算法的邏輯。
public static void main(String[] args) {
int arr[] = new int[]{8,7,6,5,4,3,2,1};//定義數組
for(int i=0;i<arr.length-1;i++){//外循環控制循環次數,因爲是兩兩比較,爲了優化,此處次數-1
for(int j=0;j<arr.length-i-1;j++){//內循環,每次找到一個最大的數字放到最後
if(arr[j]>arr[j+1]){//交換條件,前一個比後一個大就互換
int temp = arr[j];//中間變量,相當於兩個裝滿水的碗要互換,需要一個空碗,這個temp就是那個 空碗
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
System.out.println("第"+(i+1)+"次排序結果:");
for (int k : arr) {//遍歷數組查看結果
System.out.print(k+" ");//此處結果不換行,沒有ln
}
System.out.println();//換行
}
System.out.println("最終排序結果:");
for (int i : arr) {
System.out.print(i+" ");
}
}
運行結果如下:
很直觀。
今天先寫到這裏,未完待續~~