顺序查找
static int SeqSearch(int[] dateArray,int x)
{
int i;
for(i=0;i<dateArray.Length;i++)
{
if (dateArray[i] == x)
return i;
}
//if (i == dateArray.Length)
return -1;
}
//二分查找
///
/// 二分查找,对从小到大排序过的数据进行查找,效率极高
///
///
///
///
static int BinSearch(int[] datArray,int x)
{
int left = 0, right = datArray.Length - 1;
while(left <=right)
{
int mind = (left + right) / 2;
if (datArray[mind] > x)
right = mind - 1;
else if (datArray[mind] < x)
left = mind + 1;
else if (datArray[mind] == x)
return mind;
}
return -1;
}
//递归阶乘
static int Mtn(int n)
{
if (n == 0)
return 1;
else
return n * Mtn(n - 1);
/*int m = 1;
for (int i = n; i >0; i--)
{
m *= i;
}
return m;*/
}
//递归二分查找
static int BinarySearch_R(int[] dateArray,int x, int left,int right)
{
if(left <=right )
{
int mind = (left + right) / 2;
if (x < dateArray[mind])
return BinarySearch_R(dateArray, x, left, mind - 1);
else if (x > dateArray[mind])
return BinarySearch_R(dateArray, x, mind + 1, right);
else if (x == dateArray[mind])
return mind;
}
return -1;
}
}
}
//递归快速排序
///
/// 递归快速排序
///
/// 数组
/// 0
/// 最大索引date.Length-1
static void QuickSort(int[] dateArray,int left,int right)
{
if (left < right)
{
int i = left;
int j = right + 1;
int pivot = dateArray[i];
do
{
do i++; while (dateArray[i] < pivot&&i<dateArray.Length-1);//从左往右找出比基准值大的数
do j--; while (dateArray[j] > pivot&&j>=0);//从右往左找出比基准值小的数
if (i < j)
{
swap(ref dateArray[i], ref dateArray[j]);//找到的小的值与找到的大的值交换位置
}
} while (i < j);
swap(ref dateArray[left], ref dateArray[j]);//i,j相等时跳出循环,把基准值放到中间位置
QuickSort(dateArray, left, j - 1);//左部分继续排序
QuickSort(dateArray, j + 1, right);//右部分继续排序
}
}
Perm排列组合
static void Perautations(char[] s,int k,int m)
{
if(k==m)
{
for (int i = 0; i <= m; i++)
{
Console.Write(s[i]);
}
}
else
{
for (int i = k; i <= m; i++)
{
char temp = s[i];
s[i] = s[k];
s[k] = temp;
Perautations(s, k + 1, m);
char temp2 = s[i];
s[i] = s[k];
s[k] = temp2;
}
}
}