冒泡算法
const int N = 10;
int[] a = new int[N];
int i, j, t;
Random randObj = new Random();
for ( i = 0; i < N;i++ )
{
a[i] = randObj.Next(10,99);
}
Console.WriteLine("排序前的数列!");
for (i = 0; i < N;i++ )
{
Console.Write("{0} ",a[i]);
}
for (i = 1; i < N; i++) //轮次,1,2,3,4
/ 冒泡算法最重要的就是先是轮次,后是每轮的次数;这中间有着一定的关系,就是轮次加比较次数等于总数!
{
for(j=0;j<N-i;j++) //每轮,4,,3,2,1
{
if (a[j] > a[j + 1]) //比较,交换而已!
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
Console.WriteLine("\n排序后:");
for (i = 0; i < N; i++)
{
Console.Write("{0} ",a[i]);
}
Console.ReadKey();
//使用foreach语句求二维数组的最小值
int [,] score = { { 98, 54, 23, 89 }, { 87, 76, 18, 43 }, { 87, 65, 78, 56 } };
int min, i;
min =score[0,0];
foreach(int k in score ) //找值!
{
if (min > k)
{
min = k;
}
}
Console.WriteLine("数组为:");
i=0;
foreach (int k in score) //打印
{
Console.Write("{0} ",k);
i = ++i; //不同与i++ i++先用后加;++i是先加后用!相当于+1操作。
if (i % 4 == 0)
{
Console.WriteLine( );
}
}
Console.WriteLine("最小值:{0}",min);
Console.ReadKey();
//二分法查找//
int[] a = {1,3,5,9,12,14,26,30,45,56};
int i, low, mid, high, m, flag;
Console.Write("请输入要查找的数m:");
m = Convert.ToInt32(Console.ReadLine());
low = 0; high = 9;
flag = 0;
mid = -1;
while(low<=high) //二分法的精髓, 直接一个while就搞定了
{
mid = (low + high) / 2;
if (m == a[mid])
{ flag = 1; break; }
else if (m > a[mid])
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
Console.WriteLine("数组:");
for (i = 0; i < 10;i++ )
{
Console.Write("{0} ",a[i]);
}
Console.WriteLine();
if (flag == 1)
{
Console.WriteLine("{0}的位置是{1}", m, mid + 1);
}
else
{
Console.WriteLine("在数组中不存在{0}",m);
}
Console.ReadKey();
///鞍点//
const int M = 5;
const int N = 4;
int[,] a = new int[ 5,4 ];
int i, j, k, p, flag, adgs;
Random randObj = new Random();
adgs = 0;
for (i = 0; i < M; i++) //生成随机点
{
for(j=0;j<N;j++)
{
a[i,j]=randObj.Next(1,100);
}
}
for (i = 0; i < M; i++) //打印这些点
{
Console.WriteLine();
for (j = 0; j < N; j++)
{
Console.Write("{0} ",a[i,j]);
}
}
for (i = 0; i < M; i++) //从行开始 行最大时的列最小!
{
p = 0; flag = 1;
for (j = 1; j < N; j++)
{
if (a[i, j] > a[i, p]) //最大!
{
p = j;
}
}
for (k = 0; k < M; k++)
{
if (a[i, p] > a[k, p]) //最小!
{
flag = 0; break;
}
if (flag == 1)
{
adgs = adgs + 1;
Console.WriteLine("\n第{0}个鞍点的位置是({1},{2})",adgs,i+1,p+1);
}
}
}
if (adgs == 0)
{
Console.WriteLine("没有鞍点!");
}
Console.ReadKey();