Java中陣列的選擇排序,選擇排序優化
阿新 • • 發佈:2018-11-30
選擇排序:
思路:
int arr[]= {5,6,2,4,3,1}; //這個"[]“放在arr後面也是可以的,和C語言一樣
流程:
第一輪比較
if(arr[0]>arr[1]){ //這裡 5不大於6,什麼都不做 int temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; } if(arr[1]>arr[2]){ //這裡 5大於2,交換元素 int temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; } 此時陣列變為 {2,6,5,4,3,1} if(arr[2]>arr[3]){ //這裡 5大於4,交換元素 int temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; } ........
第二輪比較
// 此時陣列為{1,6,5,4,3,2}
if(arr[1]>arr[2]){ //第一輪比較後,arr[0]為最小值已經確定,直接從arr[1]開始比
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
.......
我這裡犯懶直接省略了,我先要自己複習一遍,理解後表達出來,
最騷的是我還得排版 /(ㄒoㄒ)/~~
程式碼
public static void selectionSort() {
//選擇排序
int[] arr = {5, 6, 2, 4, 3, 1};
for (int i = 0; i < arr.length - 1; i++) { //外層選中的元素
for (int j = i + 1; j < arr.length; j++) { //內層從i後依次取出元素與i比較
if (arr[i] > arr[j]) {
int temp = arr[j];
arr[j] = arr[i];
arr[ i] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
優化:
public static void selectionSort2() {
//選擇排序
int[] arr = {5, 6, 2, 4, 3, 1};
for (int i = 0; i < arr.length - 1; i++) { //外層共需比較n-1輪
int flag = i; //新增的程式碼,記錄選中元素的位置
for (int j = flag + 1; j < arr.length; j++) { //內層每次從flag後依次取出元素與i比較,這裡要將flag替換i,這樣才能保證
if (arr[flag] > arr[j]) { //拿到最小值
flag = j;
}
}
if(flag !=i){ //和上篇的冒泡優化原理相同,減少交換次數
int temp = arr[flag];
arr[flag] = arr[i];
arr[i] = temp;
}
}
System.out.println(Arrays.toString(arr));
/**
* tip:建議打個斷點Debug一下,跟著流程走一遍就能很好的理解了
*/
}