C#的几种简单算法

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰[指令],算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的[输入],在有限时间内获得所要求的输出。

阶乘

 public  static long Calculate(int n)
        {
            if (n < 0)
            {
                throw new ArgumentOutOfRangeException("n必须为非负数。");
            }
            if (n == 0)
            {
                return 1;
            }
            return n * Calculate(n - 1);
        }
            static void Main(string[] args)
        {
            Console.WriteLine(Calculate(0));

            }

冒泡排序

private void Func(int[] Arg)
        {     
  //外循环每次把参与排序的最大数排在最后
            for (int i = 1; i < Arg.Length; i++)
            {
                int a = 0;  // 临时变量

 //内层循环负责对比相邻的两个数,并把最大的排在后面
                for (int j = 0; j < Arg.Length-i; j++)
                {
//如果前 一个数大于后一个数,则交换两个数
                    if (Arg[j] > Arg[j + 1])
                    {
                        a = Arg[j + 1];
                        Arg[j + 1] = Arg[j];
                        Arg[j] = a;
                    }
    //用一个循环访问数组里的元素并打印
                for (int k = 0; k < Arg.Length; k++)
                {
                    Console.WriteLine(Arg[k]);
                }
          }

插入排序

public class insertSort
   {
       static void Main2()
       {
           int[] number = { 30, 25, 65, 17, 99, 12, 33, 9, 200, 2, 60 };
           int tmp;
           for (int i = 1; i <= number.Length - 1; i++)
           {
               if (number[i] < number[i - 1])
               {
                   tmp = number[i];
                   int j = i - 1;
                   for (; j >= 0&&number[j] > tmp ; j--)
                   {
                       number[j + 1] = number[j];
                   }
                   number[j+1] = tmp;
               }
           }
           for (int i = 0; i < number.Length; i++)
           Console.WriteLine(number[i]);
           Console.Read();
       }
   } 

折半排序

public class halfSort
   {
       static void Main()
       {
           int[] number = { 30, 25, 65, 17, 99, 12, 9, 33, 200, 2, 60 };
           int tmp;
           for (int i = 1; i <= number.Length - 1; i++)
           {
               tmp = number[i];
               int low = 0;
               int high = i - 1;
               while (low <= high)
               {
                   int pos = (low + high) / 2;
                   if (tmp < number[pos])
                       high = pos - 1;
                   else
                       low = pos + 1;
               }
               for (int j = i - 1; j > high; j--)
                   number[j + 1] = number[j];
               number[high + 1] = tmp;
           }
           for (int i = 0; i < number.Length; i++)
           Console.WriteLine(number[i]);
           Console.Read();
       }
   }

你可能感兴趣的:(C#的几种简单算法)