• c# 冒泡排序,折半查找。二维数组


    (一).冒泡排序。
    1.冒泡排序是用双层循环解决。外层循环的是趟数,里层循环的是次数。
    2.趟数=n-1;次数=n-趟数。
    3.里层循环使用if比较相临的两个数的大小,进行数值交换。
    
    作业:
    1.先把冒泡排序写一遍。
    2.使用冒泡排序,做青歌赛的打分程序。要求去掉两个最高,两个最低分,求平均得分。
    
    代码。
    
    (二).折半查找。
    前提:数组必须是有序的。
    思路:用两个变量分别代表上限(top)和下限(bottom)的下标,再用一个变量代表中间(mid)的下标。
    1.求中间下标:mid = (top+bottom)/2
    2.上限下标下移:top = mid+1.     假设数组是升序排列。
    3.下限下标上移:bottom = mid-1;
    4.循环条件是:bottom>=top
    static void Main(string[] args)
    {
    int[] a = new int[] { 3, 5, 7, 9, 11, 13, 14, 18 };
    
    Console.Write("请输入要找的数:");
    int find = Convert.ToInt32(Console.ReadLine());
    
    int top, bottom, mid; //上限下标,下限下标,中间下标
    top = 0;
    bottom = a.Length - 1;
    
    while(bottom>=top) //只要下限下标还在上限下标的下面,就循环,否则没找到就结束。
    {
    //算中间下标
    mid = (top + bottom) / 2;
    //取中间的值
    int n = a[mid];
    if(n < find)
    {
    top = mid + 1; //调整上限的下标
    }
    else if(n>find)
    {
    bottom = mid - 1;// 调整下限的下标。
    }
    else
    {
    Console.WriteLine("找到了,在第" + mid + "个元素上");
    break;
    }
    }
    }
    
    二维数组:
    表格的模型。
    定义:
    数据类型[,] 数组名 = new 数组类型[维度长度,维度长度];
    int[,] a = new int[3,4];
    int[,] a = new int[3, 4] { { 1, 2, 3, 4 },{ 5, 6, 7, 8 }, { 9, 0, 9, 8 } };
    赋值:
    数组名[下标,下标] = 值;
    a[0,0] = 5;
    a[2,3] = 10;
    取值:
    数组名[下标,下标];
    应用:
    
    语文 数学 总分
    
    int[,] a = new int[3, 4];
    //输入
    for (int i = 0; i < 3; i++)
    {
    //自动生成学号
    a[i, 0] = i + 1;
    //语文成绩
    Console.Write("语文:");
    a[i, 1] = Convert.ToInt32(Console .ReadLine ());
    //数学成绩
    Console.Write("数学:");
    a[i, 2] = Convert.ToInt32(Console.ReadLine());
    //总分
    a[i, 3] = a[i, 1] + a[i, 2];
    
    }
    //显示
    Console.WriteLine("学号	语文	数学	总分");
    for (int i = 0; i < 3; i++)
    {
    for (int j = 0; j < 4; j++)
    {
    Console.Write(a[i,j]+"	");
    
    }
    Console.WriteLine();
    }
    
    搬箱子
    
    int x = 3, y = 1;//记录小人初始位置
    int[,] map = new int[10, 10]
    {
    {1,1,1,1,1,1,1,1,1,1},
    {1,0,0,0,0,1,0,0,0,1},
    {1,0,0,0,0,1,0,0,0,1},
    {1,4,2,0,0,0,0,0,0,1},
    {1,0,0,0,0,0,0,0,0,1},
    {1,0,0,0,0,0,0,0,0,1},
    {1,0,0,0,0,0,0,0,0,1},
    {1,1,1,1,1,0,0,0,0,1},
    {1,0,0,0,0,0,0,0,3,1},
    {1,1,1,1,1,1,1,1,1,1}
    };
    
    //在键盘接受指令,对指令分析运算,输出数据
    while (true)//无数次执行循环体
    {
    for (int i = 0; i < 10; i++)//打印初始图
    {
    for (int j = 0; j < 10; j++)
    {
    if (map[i, j] == 0)
    {
    Console.Write(" ");
    }
    else if (map[i, j] == 1)
    {
    Console.Write("");
    }
    else if (map[i, j] == 2)
    {
    Console.Write("");
    }
    else if (map[i, j] == 3)
    {
    Console.Write("");
    }
    else if (map[i, j] == 4)
    {
    Console.Write("");
    }
    }
    
    Console.WriteLine();
    }
    
    ConsoleKeyInfo s = Console.ReadKey();//在键盘接受指令
    int t = map[x, y];
    
    if (s.Key.ToString() == "RightArrow")//若接受指令为“→”,
    {
    if (map[x, y + 1] == 0)//若右边方格为空格,小人物与空格交换数据
    {
    map[x, y] = map[x, y + 1];
    map[x, y + 1] = t;
    y++;
    }
    else if (map[x, y + 1] == 2 && map[x, y + 2] != 1)//若右边方格为箱子,右边方格接受小人物数据,小人物方
    
    //格数据变零,右数第二个方格接受箱子方格数据
    {
    int m = map[x, y + 1];
    map[x, y + 1] = t;
    map[x, y] = 0;
    map[x, y + 2] = m;
    y++;
    
    
    }
    }
    else if (s.Key.ToString() == "LeftArrow")
    {
    if (map[x, y - 1] == 0)
    {
    map[x, y] = map[x, y - 1];
    map[x, y - 1] = t;
    y--;
    }
    else if (map[x, y - 1] == 2 && map[x, y - 2] != 1)
    {
    int m = map[x, y - 1];
    map[x, y - 1] = t;
    map[x, y] = 0;
    map[x, y - 2] = m;
    y--;
    
    }
    }
    else if (s.Key.ToString() == "UpArrow")
    {
    if (map[x - 1, y] == 0)
    {
    map[x, y] = map[x - 1, y];
    map[x - 1, y] = t;
    x--;
    }
    else if (map[x - 1, y] == 2 && map[x - 2, y] != 1)
    {
    int m = map[x - 1, y];
    map[x - 1, y] = t;
    map[x, y] = 0;
    map[x - 2, y] = m;
    x--;
    
    }
    
    
    }
    else if (s.Key.ToString() == "DownArrow")
    {
    if (map[x + 1, y] == 0)
    {
    map[x, y] = map[x + 1, y];
    map[x + 1, y] = t;
    x++;
    }
    else if (map[x + 1, y] == 2 && map[x + 2, y] != 1)
    {
    int m = map[x + 1, y];
    map[x + 1, y] = t;
    map[x, y] = 0;
    map[x + 2, y] = m;
    x++;
    
    
    }
    
    }
    Console.Clear();
    
    
    if (map[8, 8] == 2)//箱子推到指定位置,跳出循环
    {
    break;
    }
    
    }
    Console.WriteLine("恭喜成功!");

     

  • 相关阅读:
    careercup-树与图 4.6
    careercup-树与图 4.5
    careercup-树与图 4.4
    careercup-树与图 4.3
    oracle 建表时显示ORA-00904无效的标识符
    Unable to read TLD "META-INF/c.tld" from JAR file
    MIME TYPE
    JavaWeb response对象常用操作
    移动硬盘文件删除后,空间没有变大
    Redis 数据结构解析和命令指南
  • 原文地址:https://www.cnblogs.com/w297613932/p/4188512.html
Copyright © 2020-2023  润新知