啥都不說,先上圖
思路:第一個元素與其後面的元素進行比較,大於就交換
以int[] arr = {2, 3, 6, -1, 2, 9}爲例
第一趟就是用arr[0]與arr[1]、arr[2]...arr[5]做比較,大於就交換,代碼可以寫成這樣
for (int j = 1; j < arr.length -1; j++) {
if (arr[0] > arr[j]){
int temp = arr[0];
arr[0] = arr[j];
arr[j] = temp;
}
}
//[-1, 3, 6, 2, 2, 9]
這樣就得到了最小值-1
接着第二趟,用arr[1]與其他做比較
min = arr[1];
for (int j = 2; j < arr.length -1; j++) {
if (arr[1] > arr[j]){
int temp = arr[1];
arr[1] = arr[j];
arr[j] = temp;
}
}
//[-1, 2, 6, 3, 2, 9]
第三趟
for (int j = 3; j < arr.length -1; j++) {
if (arr[2] > arr[j]){
int temp = arr[2];
arr[2] = arr[j];
arr[j] = temp;
}
}
//[-1, 2, 2, 6, 3, 9]
這裏就發現一點性能問題了,6與3比較,然後交換,然後3與2比較然後交換,這樣交換了兩次,如果數據大的話會進行很多次交換,不理想
然後可以修改成,(比如第二趟結束後 [-1, 2, 6, 3, 2, 9]),再定義一個變量用來存儲最小值的索引 int index = 0,到循環完之後才進行交換,這樣就只用進行一次交換
int[] arr = {2, 3,6, -1,2,9};
//當前最小值索引
int index = 0;
for (int j = 1; j < arr.length -1; j++) {
if (arr[index] > arr[j]){
index = j;//將當前這個數的索引存儲起來
}
}
//如果發現,不需要交換的話,就跳過
if (index != 0){
int temp = arr[index];
arr[index] = arr[0];
arr[0] = temp;
}
System.out.println(Arrays.toString(arr));//[-1, 3, 6, 2, 2, 9]
//當前最小值索引
index = 1;
for (int j = 2; j < arr.length -1; j++) {
if (arr[index] > arr[j]){
index = j;//將當前這個數的索引存儲起來
}
}
if (index != 1){
int temp = arr[index];
arr[index] = arr[1];
arr[1] = temp;
}
System.out.println(Arrays.toString(arr));//[-1, 2, 6, 3, 2, 9]
好寫到這,規律就出來了
public static void search(int[] arr){
for (int i = 0; i < arr.length - 1; i++) {
//當前最小值索引
int index = i;
for (int j = i + 1; j < arr.length -1; j++) {
if (arr[index] > arr[j]){
index = j;//將當前這個數的索引存儲起來
}
}
if (index != i){
int temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
}
}