分享程式代碼相關筆記
目前文章總數:157 篇
最後更新:2024年 12月 07日
給定一組可比較陣列
1-1. 檢查可比較陣列是否由小到大排序
1-2. 不是時洗牌
1-3. 重複1-1, 1-2 直到由小到大
2. 完成排序
初始內有4個值
輸入一組數列 inputItem 求出 result
public void Execute()
{
List<int> inputItem = new() { 92, 17, 38, 59, 26, 39 };
var bogoSort = new BogoSort<int>();
var result = bogoSort.BogoSorting(inputItem);
}
主要三個流程
1. 輸入陣列隨機排序
2. 檢查是否由小到大,沒有重複 1.、2.步驟
3. 完成
/// <summary>
/// Bogo排序 - Quantum bogodynamics / bozo sort / 猴子排序
/// </summary>
/// <param name="items">一串可比較的陣列 EX: [3,2,5,1,4]</param>
/// <returns>倒序的陣列 EX: [5,4,3,2,1]</returns>
public List<T> BogoSorting(List<T> items)
{
while (!IsAscendingSort(ref items))
{
Shuffle(ref items);
}
return items;
}
/// <summary>
/// 洗牌-O(N)
/// </summary>
private static void Shuffle(ref List<T> items)
{
var random = new Random(Guid.NewGuid().GetHashCode());
for (int index = 0; index < items.Count - 1; index++)
{
//Swap
int valA = random.Next(0, items.Count);
int valB = new Random(random.Next(0, 1000)).Next(0, items.Count);
T temp = items[valA];
items[valA] = items[valB];
items[valB] = temp;
}
}
/// <summary>
/// 是否為升序排序
/// </summary>
/// <returns></returns>
private static bool IsAscendingSort(ref List<T> items)
{
for (int index = 0; index < items.Count - 1; index++)
{
if (items[index].CompareTo(items[index + 1]) > 0)
{
return false;
}
}
return true;
}