C#的几种简单算法
2017-03-17 本文已影响0人
困卡
算法(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();
}
}