常见的算法快速分析解决(一)

冒泡法                                                                                           
题目:用冒泡法从键盘输入10个数字,编写代码对他排序
分析:
      冒泡法排序将待排序的元素看做是垂直的气泡,值较小的元素比较轻,往上浮动,在这里算法中需要对这组“气泡”出来若干次;每处理一次,就对两个相邻的“气泡”的值进行交换,当位置较高的“气泡”大于另一个“气泡”的值,则可以通过临时变量将两个“气泡”的值交换,所以此时,第一次处理后,最轻的“气泡”值就浮到最高的位置,第二次处理后,第二轻的数据浮到第二高的位置。一般处理N次以后,这时就没有必要比较第N高位置以上的“气泡”,因为此时差不多的“气泡”都正确排好了序.
代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace bubble_sort
{
class Program
{
staticvoid Main(string[] args)
{
int a, b,temp;
int[] Bubble_sort_arr =newint[10];//定义类型为int的数组Bubble_sort_arr
Console.WriteLine("请输入10个整数");
for (a=0; a <10;a++ )//将输入的10个数字存储于数组的子项当中
{
Bubble_sort_arr[a]
= Convert.ToInt32(Console.ReadLine());
}
for (b = Bubble_sort_arr.Length -1; b >0;b-- )//经过2层的循环,将数组中的子项数值进行交换
{
for(a=0;a<b;a++)
{
//当前一项大于后一项的时候,将交换两项的位置
if (Bubble_sort_arr[a] > Bubble_sort_arr[a +1])
{
temp
= Bubble_sort_arr[a];
Bubble_sort_arr[a]
= Bubble_sort_arr[a +1];
Bubble_sort_arr[a
+1] = temp;
}
}

}
Console.WriteLine(
"排好序的10个整数是");
for (a =0; a < Bubble_sort_arr.Length;a++ )
{
Console.WriteLine(Bubble_sort_arr[a].ToString());
}
Console.ReadLine();

}
}
}
结果:
 
 递归法                                                                                            
题目:递归法对一组的排序规则为:1、1、2、3、5、8、13、21、34........请求第50位的数值
分析:
      从给出的数字序列当中发现规律,第1个数字和第2个数字相加之和为第3个数;第2个数和第3个数的和为第4个数,依次类推,可知道第N-1个数字和第N个数字相加的和为第N+1数字,此时可以得到如下规律:
      当N=0;或者N=1时,F(N)=1;      当N>1时,F(N)=F(N-1)+F(N-2);此时不难得到第50个数字是多少了...如图:
代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Recursion
{
class Program
{
staticvoid Main(string[] args)
{

Console.WriteLine(
"输出第50为的是{0}",GetNumber(49));
Console.ReadKey();
}
staticint GetNumber(int N)
{
if (N <=1)
{
return1;
}

return GetNumber(N -1) + GetNumber(N -2);

}
}
}
 
 高斯求和                                                                                         
高斯求和:整数1--100求和的问题根据数学家高斯给出著名的解决方法,请用算法实现..
分析:

在这里就不说高斯是怎么实现求和的故事了,你想知道的可以看http://zhidao.baidu.com/question/10587649.html,直接给一张图:

代码如下:
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Gaussian_summation
{
class Program
{
staticvoid Main(string[] args)
{
//定义两个int类型变量 a,sum,a用于计数和索引,sum用于存储相加结果
int a, sum =0;
int[] Arr =newint[100];//定义int类型数组,Arr包括100个子项
for(a=0;a<Arr.Length;a++)//开始循环,从0-99,将a赋予当前数组子项
{
Arr[a]
=a+1;
}
for (a =0; a < Arr.Length/2;a++ )//循环,次数为数组一半
{
sum
+= Arr[a] + Arr[Arr.Length - a -1];//将数组a索引的子项和数组尾端计数第a的位置的子项相加,将结果赋值给sum
}
Console.WriteLine(sum.ToString());
Console.ReadLine();

}
}
}
 
结果:
 
 
结尾:                                                                                         
接下继续:常见的算法快速分析解决(二)
推荐:程序之法 算法之道:http://blog.csdn.net/v_JULY_v

作者:类菌体
出处:http://www.cnblogs.com/bacteroid/archive/2011/05/25/2057401.html
关于作者:在校学生
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接
如有问题,可以通过303323670@qq.com 联系我,非常感谢。

posted @ 2011-05-25 21:50  类菌体  阅读(799)  评论(6编辑  收藏  举报