分享程式代碼相關筆記
目前文章總數:157 篇
最後更新:2024年 12月 07日
給定一組可比較陣列
1. 遍歷元素,當第一個數值大於最後一個數值時交換
2. 如果當前集合元素數量大於等於3,依序以下順序處理
3-1. 排序前2/3 的元素
3-2. 排序後2/3 的元素
3-3. 排序前2/3 的元素
5. 排序完成
初始內有6個值
輸入一組數列 inputItem 求出 result
public void Execute()
{
List<int> inputItem = new() { 92, 17, 38, 59, 26, 39, 41, 75, 6 };
var stoogeSort = new StoogeSort<int>();
var result = stoogeSort.StoogeAscendingSorting(inputItem);
}
主要三個流程
1. 遍歷,頭大於尾交換
2. 前2/3,後2/3,前2/3 排序交換,重複1.直到遍歷完畢
3. 完成排序
public class StoogeSort<T> where T : IComparable
{
public List<T> StoogeAscendingSorting(List<T> items)
{
//將排序的起訖丟入,進行排序
return StoogeSortMethod(items, 0, items.Count() - 1);
}
public List<T> StoogeSortMethod(List<T> items, int startIndex, int endIndex)
{
//規則1. 如果最後一個值小於第一個值,則交換這兩個數
if (items[startIndex].CompareTo(items[endIndex]) > 0)
{
var temp = items[startIndex];
items[startIndex] = items[endIndex];
items[endIndex] = temp;
}
//規則2. 如果當前集合元素數量大於等於3,依序以下順序處理
if ((endIndex - startIndex) > 1)
{
var length = (endIndex - startIndex + 1) / 3;//索引由0開始,所以+1
StoogeSortMethod(items, startIndex, endIndex - length);//排序前2/3
StoogeSortMethod(items, startIndex + length, endIndex );//排序後2/3
StoogeSortMethod(items, startIndex, endIndex - length);//排序前2/3
}
return items;
}
public void Swap(ref T valueA, ref T valueB)
{
var temp = valueA;
valueA = valueB;
valueB = temp;
}
}