分享程式代碼相關筆記
目前文章總數:157 篇
最後更新:2024年 12月 07日
給定一組可比較陣列
1. 設定一個自定義間隔值interval
2. 當前可比較陣列的數量的gap值 (count / interval)
3. 遍歷可比較陣列依照gap值做比較,小的進行交換
4. 縮減gap值 (gap = gap / interval) 若gap值大於0 重複2-4步驟
5. 完成排序
初始內有9個值,設定Interval = 3
輸入一組數列 inputItem 求出 result
public void Execute()
{
List<int> inputItem = new() { 92, 17, 38, 59, 26, 39, 41, 75, 6 };
var shellSort = new ShellSort<int>();
var result = shellSort.ShellSorting(inputItem);
}
主要四個流程
1. 設定間隔值
2. 遍歷陣列,依照間隔值小的進行交換
3. 縮減間隔值,直到0,否則重複2步驟
4. 完成排序
public class ShellSort<T> where T : IComparable
{
public List<T> ShellSorting(List<T> items)
{
int interval = 3;
int gap = items.Count() / interval > 1 ? interval + 1
: 1;
while (gap >= 1)
{
for (int index = gap; index < items.Count(); index++)
{
for (int compareIndex = index;
gap <= compareIndex && items[compareIndex].CompareTo(items[compareIndex-gap]) < 0;
compareIndex = compareIndex - gap
)
{
// 交換元素位置
T temp = items[compareIndex];
items[compareIndex] = items[compareIndex - gap];
items[compareIndex - gap] = temp;
}
}
gap /= interval;
}
return items;
}
}