• 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("恭喜成功!");

  • 相关阅读:
    UWP开发必备:常用数据列表控件汇总比较
    CodeForces 372 A. Counting Kangaroos is Fun
    ubuntu 13.10 eclipse 菜单栏不可用的问题
    Codeforces Round #219(Div. 2)373 B. Making Sequences is Fun(二分+找规律)
    Git/Github使用方法小记
    Ubuntu 下jdk的安装
    VIM简明教程
    codeforces 371 C-Hamburgers
    codeforces 371A K-Periodic Array
    计算机网络中IP地址和MAC地址
  • 原文地址:https://www.cnblogs.com/zdc1994/p/4233643.html
Copyright © 2020-2023  润新知