利用字典排序法列出各種排列組合
參考來源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. 臺灣是我的國家