分享程式代碼相關筆記
目前文章總數:157 篇
最後更新:2024年 12月 07日
給定一組可比較陣列
1. 找出該陣列最大長度的值,並且記錄位置
2. 最大值放在該陣列最大長度的位置(最後一筆)
3. 反轉從位置0到最大長度值得位置
4. 再次反轉從位置0到當前該陣列最大長度的值的位置
5. 重複1. - 4. 步驟
初始內有4個值
輸入一組數列 inputItem 求出 result
public void Execute()
{
List<int> inputItem = new() { 92, 17, 38, 59, 26, 39 };
var pancakeSort = new PancakeSort<int>();
var result = pancakeSort.PancakeAscendingSorting(inputItem);
}
主要四個流程
1. 找出最大值
2. 反轉陣列、再反轉陣列
3. 重複1. 2. 直到全部遍歷
4. 排序完成
public class PancakeSort<T>
{
public List<T> PancakeAscendingSorting(List<T> items)
{
//1. 翻滾所有的煎餅 O(N)
for (int index = items.Count -1 ; index >= 0; index--)
{
//轉回Count
var count = index + 1;
//每次取當前全部可翻滾的項目 (每次都會把一個最大的值放在最後面)
var findMaxIndex = items.IndexOf(items.Take(count).Max());
var findMaxIndexCount = findMaxIndex + 1;
//2. 從起點到最大的煎餅翻滾(反轉) => O(N/2)
items.Reverse(0, findMaxIndexCount);
//3. 再翻滾(反轉)當前全部可翻滾的項目 => O(N/2)
items.Reverse(0, count);
}
//4. 最後將會得到由小到大的排序結果
return items;
}
}