62,050
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Text;
namespace UnionCompany
{
class Program
{
static void Main(string[] args)
{
//算法总结
Sort sort = new Sort();
//递归算法
Console.WriteLine(sort.Factorial(6));
//
int[] arr ={ 1, 9, 3, 6 };
sort.SortProduce(ref arr);
foreach (int i in arr)
{
Console.WriteLine(i);
}
Console.ReadLine();
}
}
public class Sort
{
/*******递归调用的原理*********
* 首先,设置一个递归头,即当问题足够简化时,直接获得答案.
* 其次,自己调用自己,即逐步缩小问题范围,比如把求n!转化为求(n-1)!
*****************************/
/// <summary>
/// 递归调用
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
public int Factorial(int n)
{
if (n == 1)
return 1;//递归头
else
return n * Factorial(n - 1);//递归调用自身
}
/*******冒泡算法的原理*********
* 根本原理:两两比较
* 比如1,9,3,6按升序排列,
* 先比较1,9是升序,则转向比较9,3 ---1936
* 非升序则交换成3,9 ---1396
* 然后再比较9,6非升序则交换 --- 1369
* 这样子每扫描一轮,就从中挑出最大的,放在最后位置.
*****************************/
/// <summary>
/// 排序---冒泡排序
/// </summary>
/// <param name="dataArray"></param>
public void SortProduce(ref int[] dataArray)
{
int pass;//记录扫描次数
int i;
int temp;
int exchangeCnt;//记录交换次数
for (pass = 0; pass < dataArray.Length; pass++)
{
exchangeCnt = 0;
for (i = 0; i < dataArray.Length - pass - 1; i++)//这里减1是因为最后一个不必再考虑.
{
if (dataArray[i] > dataArray[i + 1])
{
temp = dataArray[i];
dataArray[i] = dataArray[i + 1];
dataArray[i + 1] = temp;
exchangeCnt++;
}
}
if (exchangeCnt == 0)//如果没有交换,说明已经排好序,返回.
return;
}
}
}
}