C#算法大纲

排序

冒泡排序

public static void BubbleSort(this int[] arry)
        {
            for (int i = 0; i < arry.Length; i++)
            {
                for (int x = 0; x < arry.Length-1-i; x++)
                {
                    if (arry[x]>arry[x+1])
                    {
                        int temp = arry[x];
                        arry[x] = arry[x + 1];
                        arry[x + 1] = temp; 
                    }
                }
            }
            arry.ToList().ForEach(item =>
            {
                Console.WriteLine(item);
            });
        }

  

选择排序

public static void SelectionSort(this int[] arry)
        {
            for (int i = 0; i < arry.Length - 1; i++)
            {
                //记录最小值索引
                int minIndex = i;
                for (int j = i + 1; j < arry.Length; j++)
                {
                    if (arry[j] < arry[minIndex])
                    {
                        minIndex = j;
                    }
                }
                //交互最小值 : 当前索引就是最小值时就不用交换
                if (minIndex != i)
                {
                    int temp = arry[i];
                    arry[i] = arry[minIndex];
                    arry[minIndex] = temp;
                }
            }
            arry.ToList().ForEach(item =>
            {
                Console.WriteLine(item);
            });
        }

  

递归

 static int Recursion(int n)//
        {
            //在方法中判断n是否为1或者2如果是返回1
            if (n==1)
            {
                return 1;
            }
            else if (n==2)
            {
                return 1;
            }
            //如果不是返回斐波那契公式重新调用自己直到求出所要值
            return Recursion(n - 2) + Recursion(n - 1);
        }

  

计算1-2+3-4+...+m

 //通过奇偶性    
   static int Man(int m)    
   {    
       int sum = 0;    
       for (int i = 1; i <= m; i++)    
       {    
           if (i % 2 >0)  //即为奇数    
               sum += i;    
           else    
               sum -= i;    
       }    
       return sum;    
   }  

  

 二叉树

 public class TreeNode
   {
	   public object Data{get;set;}
	   public TreeNode left{get;set;}
	   public TreeNode right{get;set;}
   }
   public class Test
   {
       /// <summary>
       /// 建立二叉树
       /// </summary>
       /// <param name="node"></param>
	   public static void CreateTree(TreeNode node)
	   {
           node.Data = Console.ReadLine();
		   if(node.Data==null||String.IsNullOrEmpty(node.Data.ToString()))
			   return;
		   node.left=new TreeNode();
		   CreateTree(node.left);
		   if(node.left.Data==null)
			   node.left=null;
		   node.right=new TreeNode();
		   CreateTree(node.right);
		   if(node.right.Data==null)
			   node.right=null;
	   }
       /// <summary>
       /// 先序遍历
       /// </summary>
       /// <param name="node"></param>
       public static void preOrder(TreeNode node)
       {
           if (node == null)
               return;
           Console.WriteLine(node.Data);
           preOrder(node.left);
           preOrder(node.right);
       }
       /// <summary>
       /// 中序遍历
       /// </summary>
       /// <param name="node"></param>
       public static void thrOrder(TreeNode node)
       {
           if (node == null)
               return;
           preOrder(node.left);
           Console.WriteLine(node.Data);
           preOrder(node.right);
       }
       /// <summary>
       /// 后序遍历
       /// </summary>
       /// <param name="node"></param>
       public static void postOrder(TreeNode node)
       {
           if (node == null)
               return;
           preOrder(node.left);
           preOrder(node.right);
           Console.WriteLine(node.Data);
       }
       /// <summary>
       /// 层序遍历
       /// </summary>
       /// <param name="node"></param>
       public static void levelOder(TreeNode tree)
       {
           Queue<object> queue = new Queue<object>();
           queue.Enqueue(tree);
           while (queue.Count > 0)
           {
               TreeNode node = queue.Dequeue() as TreeNode;
               Console.WriteLine(node.Data);
               if (node.left != null)
                   queue.Enqueue(node.left);
               if (node.right != null)
                   queue.Enqueue(node.right);
           }
       }
class program
    {
        static void Main(string[] args)
        {
            TreeNode node = new TreeNode();
            Test.CreateTree (node);
            Console.WriteLine("先序");
            Test.preOrder (node);
            Console.WriteLine("中序");
            Test.thrOrder(node);
            Console.WriteLine("后序");
            Test.postOrder(node);
            Console.WriteLine("层序");
            Test.levelOder(node);
            Console.ReadLine();
        }

  

posted @ 2020-07-08 08:34  火星转地球  阅读(197)  评论(0编辑  收藏  举报