算法:排列算法
记得上大学期间试着实现一个排列算法,可惜当时没有写出来,只是硬编码了几层循环,今天用递归终于写出来了。
实现代码
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace DataStuctureStudy 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Arrange(new char[] { 'A', 'B', 'C', 'D'}); 14 } 15 16 private static void Arrange(char[] items) 17 { 18 Arrange(items, 0); 19 } 20 21 private static void Arrange(char[] items, int startIndex) 22 { 23 if (startIndex == items.Length - 1) 24 { 25 Console.WriteLine(String.Join(",", items)); 26 } 27 28 for (var i = startIndex; i < items.Length; i++) 29 { 30 Arrange(items, startIndex + 1); 31 Rolate(items, startIndex); 32 } 33 } 34 35 private static void Rolate(char[] items, int startIndex) 36 { 37 var temp = items[startIndex]; 38 for (int i = startIndex; i < items.Length - 1; i++) 39 { 40 items[i] = items[i + 1]; 41 } 42 items[items.Length - 1] = temp; 43 } 44 } 45 }
输出