拜讀vue官方文件
阿新 • • 發佈:2020-12-18
Java 選擇排序
這是演算法圖解書裡的演算法解釋和程式碼,最下面還有一個簡單的程式碼
選擇排序的速度雖然沒有快速排序這麼快,但也是一種很靈巧的演算法。如以下程式碼可通過選擇排序實現:將陣列元素按從小到大的順序排列。 我們先編寫一個用於找出陣列中最小元素的方法:
1、首先,我們假定陣列的第一位為最小元素
2、然後,我們從假定最小元素的位置向後遍歷陣列進行比較
3、這樣我們就可以求出目前陣列中最小的值,也就是圖中位於索引4處的0元素
4、然後我們再把現在求出的最小元素和之前假定的最小元素互換位置
5、我們把元素的位置互換之後,再假定陣列的第二個位置也就是之前假定位置的下一位為最小元素
6、然後再重複類似於之前的操作:
- 向後遍歷陣列,得出從假定最小元素位置後開始陣列的最小值。
- 陣列中假定的最小元素和求出的最小元素互換位置。
- 再假定之前假定位置的下一位為最小元素,繼續向後遍歷比較,互換位置。
這樣我們就可以發現似乎左邊有一個有序的陣列,右邊有一個亂序的陣列,而右邊亂序的陣列一直在丟擲最小元素給左邊有序的陣列吞噬。當右邊的陣列被左邊的陣列吞噬完了,左邊的陣列就成功的進化成了完整版的有序陣列。這樣我們的排序就完成了。
上程式碼
public static void main(String[] args) {
// 需要排序的陣列
int[] arr = {5, 3, 6, 2, 0};
// 進行選擇排序,並返回一個已經排序好的陣列
selectionSort(arr);
// 輸出已經排序好的陣列
System.out.println(Arrays.toString(arr));
}
/**
* 以最小元素為標誌位 -> 選擇排序(升序)
* @param arr 需要排序的陣列
* @return
*/
private static int[] selectionSort(int[] arr) {
// 預設最小值為第一個元素值
int smallest = arr[0];
// 最小值的索引
int index = 0;
// 外層迴圈控制需要比較的次數
for (int i = 0; i < arr.length - 1; i++) {
// 遍歷陣列,開始比較 {5, 3, 6, 2, 0}
for (int j = i + 1; j < arr.length; j++) {
// 判斷當前遍歷的元素是否比最小的元素小,直至求出當前亂序(右邊)陣列中的最小值
if (arr[j] < smallest) {
smallest = arr[j];
index = j;
}
}
// 之前假定的最小元素和求出的最小元素互換位置
int temp = arr[i];
arr[i] = smallest;
arr[index] = temp;
// 假定的最小元素向後移動一位,以便下次比較
smallest = arr[i+1];
index = i+1;
}
return arr;
}
程式碼結果:
簡單的程式碼塊和註釋
public static void main(String[] args) {
//選擇排序:每次選出最小的,依次放在前面,反覆
int[] array = {1, 12, 43, 2, 2, 6, 7, 4, 7, 34, 23, 2, 454, 687987, 4, 5, 5, 6};
selectionSort(array);
}
//選擇排序
public static void selectionSort(int[] array) {
for (int i = 0; i < array.length; i++) {
int min = i; //記錄最小下標值
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[min]) {
min = j;
}
}
//互換數字的位置
int temp = array[min];
array[min] = array[i];
array[i] = temp;
}
System.out.println(Arrays.toString(array));//把陣列轉化成String打印出來
}
程式碼結果: