選擇排序法
圖解:
題目分析:
通過觀察發現,題目要實現把數組元素{13,46,22,65,3}進行排序
1.提到數組排序,就要進行元素值大小的比較,通過上圖發現,想完成排序要經過若干次的比較才能夠完成。
2.上圖中用每圈要比較的第一個元素與該元素後面的數組元素依次比較到數組的最後一個元素,把小的值放在第一個數組元素中,數組循環一圈後,則把最小元素值互換到了第一個元素中。
3.數組再循環一圈後,把第二小的元素值互換到了第二個元素中。按照這種方式,數組循環多圈以後,就完成了數組元素的排序。這種排序方式我們稱爲選擇排序。
解題步驟:
1.用於循環(外層循環),指定數組要循環的圈數(通過圖解可知,數組循環的圈數爲數組長度 - 1)
2.在每一圈中,通過對循環(內層循環)完成數組要比較的第一個元素與該元素後面的數組元素依次比較到數組的最後一個元素,把小的值放在第一個數組元素中
3.在每一圈中,要參與比較的第一個元素由第幾圈循環來決定。如上圖所示
一)進行第一圈元素比較時,要比較的第一個元素爲數組第一個元素,即索引爲0的元素
B)中進行第二圈元素比較時,要比較的第一個元素爲數組第二個元素,即索引爲1的元素
C)中依次類型,得出結論:進行第Ñ圈元素比較時,要比較的第一個元素爲數組第Ñ個元素,即數組索引爲N-1的元素
代碼如下:
// 選擇排序
public static void selectSort(int[] arr) {
// 功能
// 外層循環用來控制數組循環的圈數
for (int i = 0; i < arr.length - 1; i++) {
// 內層循環用來完成元素值比較,把小的元素值互換到要比較的第一個元素中
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
冒泡排序法
圖解:
題目分析:
通過觀察發現,題目要實現把數組元素{13,46,22,65,3}進行排序
1.提到數組排序,就要進行元素值大小的比較,通過上圖發現,想完成排序要經過若干次的比較才能夠完成。
2.上圖中相鄰的元素值依次比較,把大的值放後面的元素中,數組循環一圈後,則把最大元素值互換到了最後一個元素中。數組再循環一圈後,把第二大的元素值互換到了倒數第二個元素中。按照這種方式,數組循環多圈以後,就完成了數組元素的排序。這種排序方式我們稱爲冒泡排序。
解題步驟:
1.用於循環(外層循環),指定數組要循環的圈數(通過圖解可知,數組循環的圈數爲數組長度 - 1)
2.在每一圈中,通過對循環(內層循環)完成相鄰的元素值依次比較,把大的值放後面的元素中
3.每圈內層循環的次數,由第幾圈循環來決定。如上圖所示
a)進行第一圈元素比較時,內層循環次數爲數組長度 - 1
b)進行第二圈元素比較時,內層循環次數爲數組長度 - 2
c)依次類型,得出結論:進行第n圈元素比較時,內層循環次數爲數組長度 - n
代碼如下:
// 冒泡排序
public static void bubbleSort(int[] arr) {
//功能
//外層循環用來控制數組循環的圈數
for (int i = 0; i < arr.length-1; i++) {
//j < arr.length-1 爲了避免角標越界
//j < arr.length-1-i 爲了比較效率,避免重複比較
//內層循環用來完成元素值比較,把大的元素值互換到後面
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}