一、斐波拉契序列 数组
// 斐波斐波拉契序列核心算法
private int CalcFibonacci(int numSeqNo)
{
if (numSeqNo == 0)
return 1;
if (numSeqNo == 1)
return CalcFibonacci(numSeqNo - 1);
return CalcFibonacci(numSeqNo - 2) + CalcFibonacci(numSeqNo - 1);
}
// 获取斐波拉契序列数组
private List<int> GetFibonacci()
{
int numCount = Convert.ToInt32(this.TFibonacciCount.Text);
List<int> objList = new List<int>();
for (int i = 0; i < numCount; i++)
{
objList.Add(CalcFibonacci(i));
}
// 打乱数组顺序
int numIndex = 0;
Hashtable objHash = new Hashtable();
List<int> objResult = new List<int>();
Random objRandom = new Random();
for (int i = 0; i < objList.Count(); i++)
{
numIndex = objRandom.Next(0, objList.Count());
if (objHash.ContainsKey(numIndex))
{
i--;
continue;
}
objHash.Add(numIndex, "");
objResult.Add(objList[numIndex]);
}
return objResult;
}
二、冒泡排序
// 排序类型
enum OrderType
{
None,
Asc,
Desc
}
// 冒泡排序
private void OrderList(ref List<int> objSource, OrderType objType = OrderType.Asc)
{
/*
* 不采用第三方变量更改变量值
* a = 3
* b = 5
*
* b = a + b => 3 + 5
* a = b - a => 8 - 3
* b = b - a => 8 - 5
*
* */
for (int i = 0; i < objSource.Count(); i++)
{
for (int j = i + 1; j < objSource.Count(); j++)
{
// 降序
if (objType == OrderType.Desc)
{
if (objSource[j] > objSource[i])
{
objSource[j] = objSource[j] + objSource[i];
objSource[i] = objSource[j] - objSource[i];
objSource[j] = objSource[j] - objSource[i];
}
}
// 升序
else if (objType == OrderType.Asc)
{
if (objSource[j] < objSource[i])
{
objSource[j] = objSource[j] + objSource[i];
objSource[i] = objSource[j] - objSource[i];
objSource[j] = objSource[j] - objSource[i];
}
}
}
}
}
三、二分法查找
// 二分法查找
private int SearchItem(List<int> objSource, int numSearch, int numStart, int numEnd, OrderType objType = OrderType.Desc)
{
// 获取中间索引
int numMiddleIndex = (numStart + numEnd) / 2;
// 判断区间是否合理
if (numStart > numEnd)
{
return -1;
}
else
{
// 判断中间数是否是目标值
if (objSource[numMiddleIndex] == numSearch)
{
return numMiddleIndex;
}
else
{
// 判断中间数是否大于目标值
if (objSource[numMiddleIndex] > numSearch)
{
if (objType == OrderType.Desc)
return SearchItem(objSource, numSearch, numStart + 1, numEnd, objType);
else
return SearchItem(objSource, numSearch, numStart, numEnd - 1, objType);
}
else
{
if (objType == OrderType.Desc)
return SearchItem(objSource, numSearch, numStart, numEnd - 1, objType);
else
return SearchItem(objSource, numSearch, numStart + 1, numEnd, objType);
}
}
}
}