十大排序之選擇排序《Blind Stab》

2021-09-25 15:02:28 字數 940 閱讀 8657

選擇排序

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個記錄的直接選擇排序可...