[.Net] 字典排序法

利用字典排序法列出各種排列組合

參考來源https://blog.csdn.net/qq_34672688/article/details/79557380的教學,
先作一組順排的組合,
再for迴圈從右邊倒數第2開始往左輪(位置=i)Taiwan is a country. 臺灣是我的國家
從其最右邊再往左找到i+1為止, 只要找到比位置i的值還大就把值和至 i 位置的值交換,
將i+1到最右順排(目前這裡是反排, 只要前後調頭即可)
換完後從i+1到最右再重覆以上動作, 直到i+1到最右的值全部為反序(用遞迴)
交換可使用[位元運算] 運用^作2整數交換

static void Main(string[] args)
{
    int[] lst = new int[6];
    for (int i = 0; i < lst.Length; i++)
        lst[i] = i + 1;

    DicSort(lst, 0);
}

static void DicSort(int[] arr, int s)
{
    Console.WriteLine(string.Join("", arr));

    for (int i = arr.Length - 2; i >= s && s < arr.Length - 1; i--)
    {
        for (int j = arr.Length - 1; j > i; j--)
        {
            if (arr[i] < arr[j])
            {
                swap(ref arr[i], ref arr[j]);
                swap2(arr, i + 1, arr.Length - 1);
                DicSort(arr, i + 1);
            }
        }
    }
}


static void swap2(int[] arr, int i, int j)
{
    if (i < j)
    {
        swap(ref arr[i], ref arr[j]);
        swap2(arr, i + 1, j - 1);
    }
}

Taiwan is a country. 臺灣是我的國家