選擇排序
public class choose ;
for (int i = 0; i < arr.length - 1; i++)
}int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
} for (int i = 0; i < arr.length; i++)
}}
分析:
n個資料,進行選擇排序,順序若是從小到大排序。它的核心思想是:每次遍歷找出最小的,交換後放在最左邊,i++;
兩層for迴圈,外層用來記錄已經找了第幾次最小的了,裡層用來每次找最小的。
優化:
最外層其實遍歷n-1次就行,因為倒數第二個最小的出來了,最後乙個肯定是最大的,並且可以不用設定變數min,全部用arr[index]替代就行。
拓展:
交換那裡,可以不引入temp中間變數,根據演算法邏輯:a ,b兩個數,交換-> a = a + b;b = a - b;a = a - b; 有這三個式子就完成兩個數的交換了,這是典型的時間換空間理念。步驟多了,但是變數少了。
很多新手容易將 int index = i;寫成int index = 0;這種寫法的問題在於,當連續兩個依次最小的時候,比如 3,2,1;第一次確實是找出了1最小,然後和3交換了,變成了1,2,3。但是接下來,2比3小,它便不會進入if(){}這裡面,也就是index的值沒有改變還是0,那麼它交換的時候就是2和1交換了變成了2,1,3。這很明顯是錯誤的。也就是說index是個變動的,它指的就是最小值的角標,而不是固定的某乙個數,也就是說他要上下統一,隨時都有可能會變動,不能固定賦值。
ok完了
十大排序演算法之選擇排序
選擇排序也是一種o n 2 時間複雜度的排序演算法,選擇排序是每一次迴圈都將找到最小值,依次將最小值 次小值分別從左至右進行排序。以下是具體實現過程,其中使用的工具類這篇部落格已經給出,import cn.zjut.util.sorttestutil public class selectsort ...
十大排序演算法 選擇排序
原理 第一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小 大 元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元素的個數為零。工具類public class utils 用於交換陣列兩個下標的位置 static void...
十大排序演算法之選擇排序2
選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。2.1 演算法描述 n個記錄的直接選擇排序可...