經典演算法(二) 選擇排序

2021-07-25 13:50:15 字數 1124 閱讀 7087

昨天我們學習了經典中的經典,氣泡排序,今天我們來學習另乙個經典演算法:選擇排序。

一、演算法描述

掃瞄所有的元素,得到最小(最大·)的元素,並將最小(最大)的元素與左邊第乙個元素進行交換。再掃瞄除第乙個位置以外的所有元素,得到最小(最大)元素,與左邊第二個元素進行交換,以此類推。

如果還不理解(以下以最小元素為例),看下圖:

我來解釋一下,首先原始資料是:20 40 30 10 60 50然後我們第一次迴圈,發現10 要比其他的都要小,我們要與左邊第乙個進行交換,所以就是與20 進行位置交換,交換後如圖:第2趟;然後我們在對除了10 以外的所有數進行再次迴圈比較,發現這次20 要比其他的都要小,然後我們要與左邊第二個進行交換,所以就是與40 進行位置交換,交換後如圖:第3趟,以此類推。

二、演算法實現

public

class selectsort ;

int temp;

// 標記,用來標記最小的那個元素

int min = 0;

for (int i = 0; i < arrs.length - 1; i++)

}// 交換位置

temp = arrs[i];

arrs[i] = arrs[min];

arrs[min] = temp;

}for (int i = 0; i < arrs.length; i++) }}

我對**進行解釋一下:第乙個for迴圈,其實和昨天我們氣泡排序的思路一樣,所以就是n 個元素,只需n - 1次迴圈就可以實現排序。

第二個for迴圈是用來與不是第乙個位置的數進行比較,並找到最小元素,並把min標記指向這個數,然後再進行位置替換。第二個for為什麼不是「arrs.length - 1」,我們不是說了,要做n - 1次迴圈,由於第二個for迴圈起始位置要比第乙個大 1,為了也迴圈 n - 1次,所以此處是 :arrs.length。

最後看執行結果:

三、總結

經典排序演算法之二 選擇排序

思想 假設給定乙個大小為n的陣列,從中選出最大的值 記錄下標 與下標n i的值進行交換 i 1,n 1 i為迴圈次數 即遍歷一次交換一次,每次遍歷確定乙個最大值。優化思路 使用一種快速查詢最值的方法可降低選擇排序的時間複雜度,例如使用堆這種資料結構,可在o logn 的情況下找到最值 普通 cmp ...

陣列經典排序演算法(二)選擇排序

如下 選擇排序 找最小值 private static void fun2 for int i 0 i arr.length 1 i int t arr i arr i arr minindex arr minindex t 輸出陣列 for int i arr 找最小值下標 i輪 下標範圍 i到l...

經典排序演算法 選擇排序

對比陣列中前乙個元素跟後乙個元素的大小,如果後面的元素比前面的元素小則用乙個變數k來記住他的位置,接著第二次比較,前面 後乙個元素 現變成了 前乙個元素 繼續跟他的 後乙個元素 進行比較如果後面的元素比他要小則用變數k記住它在陣列中的位置 下標 等到迴圈結束的時候,我們應該找到了最小的那個數的下標了...