设为首页 加入收藏

TOP

排列数据的输出(二) 循环处理
2015-07-20 17:49:40 来源: 作者: 【 】 浏览:2
Tags:排列 数据 输出 循环 处理

排列组合是高中是学到的 知识,理论上很清楚,但如何使用代码实现,却一直没有尝试过,近段时间由于项目需要,写一个排列的算法,想不到却花费了不少时间。

在排列数据的输出一文中列举了几种输出的方法,但都是递归的方法,但又没有不用递归,只用循环的方法呢?于是自己就开始考虑了,都知道

要把4个元素的所有排列输出,必须递归4次,对应的是4层的循环,要把5个元素的所有组合输出,必须递归5次,对应的是5层的循环,一时间自己竟没有找到如何把递归改为循环的方法。于是自己就一最简单的方法,思考一个元素的排列,两个元素的排列,三个元素的排列。

在参考了组合数据的输出(二)的想法后,想不到竟然也有了启发。

例如:1,2,3的排列

考察:1的排列 ,只有{1}

考察:1,2的排列,2可以插入到1的前边,也可以插入到1的后边,又是有两种{1,2};{2,1}

考察:1,2,3的排列,3可以插入到集合{1,2}中任意一个元素的前边和后边,也可以插入到集合{2,1}中任意一个元素的前边和后边


使用代码实现

 public static void CreatSumData5(List
  
    columnNameList)
        {
            List
   
    > list = new List
    
     >(); string nameFirst = columnNameList[0];//第一个元素时特殊处理 List
     
       itemTemp3 = new List
      
       (); itemTemp3.Add(nameFirst); list.Add(itemTemp3); for (int i = 1; i < columnNameList.Count; i++)//跳过已处理的第一个元素 { string name = columnNameList[i];//第一个元素时特殊处理 int count = list.Count; List
       
        > listLast = new List
        
         >();//保存上次生成的集合数据 listLast.AddRange(list);//把上次生成的集合数据放入listLast list.Clear();//清空上次的数据,因为每次生成的集合已经和上次不一样了 for (int j = 0; j < count; j++)//遍历上次生成的集合 { List
         
           itemListLast = new List
          
           ();//处理集合 itemListLast.AddRange(listLast[j]); int count2 = itemListLast.Count; for (int k = 0; k < count2; k++)//给集合中的每一个可能位置插入新的元素 { List
           
             itemTemp = new List
            
             (); itemTemp.AddRange(itemListLast); itemTemp.Insert(k,name); list.Add(itemTemp); } List
             
               itemTemp2 = new List
              
               ();//在最后一个位置放入新的元素 itemTemp2.AddRange(itemListLast); itemTemp2.Add(name); list.Add(itemTemp2); } } StringBuilder strs = new StringBuilder(); for (int j = 0; j < list.Count; j++) { List
               
                 item = list[j]; for (int i = 0; i < item.Count; i++) { strs.Append(item[i]+","); } strs.AppendLine(""); } WrieData(strs.ToString()); } private static void WrieData(string text) { string file = "ZuheTestout.js"; StreamWriter sr = new StreamWriter(file); sr.WriteLine(text); sr.Close(); } public static void Test() { List
                
                  columns = new List
                 
                  (); columns.Add("c0"); columns.Add("c1"); columns.Add("c2"); columns.Add("c3"); // columns.Add("c4"); // CreatSumData1(columns); // string text = CreateAllGroupingData(columns); // WrieData(text); CreatSumData5(columns); }
                 
                
               
              
             
            
           
          
         
        
       
      
     
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 3001 Travelling 状压DP 下一篇ZOJ 2588 Burning Bridges(强连..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)