分享程式代碼相關筆記
目前文章總數:157 篇
最後更新:2024年 12月 07日
給定一組可比較陣列
1. 遍歷整個索引,然後找出當前最小值的索引位置
2. 當前索引位置與最小值索引位置交換。
3. 往下一個索引前進,重複1,2步驟
備註:相較於泡沫排序,只有在真正需要交換時才交換,時間複雜度雖然一樣差,但實際上比泡沫排序快很多(少了數值頻繁交換)
初始內有4個值
輸入一組數列 inputItem 求出 result
public void Execute()
{
List<int> inputItem = new() { 92, 17, 38, 59, 26, 39 };
var selectionSort = new SelectionSort<int>();
var result = selectionSort.SelectionAscendingSort(inputItem);
}
主要四個流程
1. 遍歷陣列由索引0開始,找一個最小值
2. 交換到索引0,往下一個索引
3. 重複1,2步驟,排序完成
public class SelectionSort<T> where T : IComparable
{
public List<T> SelectionAscendingSort(List<T> items)
{
int index = 0;
//1. 遍歷
for (int keyIndex = 0; keyIndex < items.Count() - 1; keyIndex++)
{
//2. 找出最小值
var minIndex = keyIndex + 1;
for (index = keyIndex + 1; index < items.Count; index++)
{
if (items[index].CompareTo(items[keyIndex]) < 0 &&
items[index].CompareTo(items[minIndex]) < 0)
{
minIndex = index;
}
}
//3. 如果當前keyIndex 已經是最小值則不用交換
if (items[keyIndex].CompareTo(items[minIndex]) < 0)
continue;
//4. 發現最小值進行minIndex 與 keyIndex交換
var temp = items[keyIndex];
items[keyIndex] = items[minIndex];
items[minIndex] = temp;
}
return items;
}
}