C#6 冒泡 折半查找 二维数组
人类思维--计算机逻辑思维
逻辑思维--代码实现
写书法:
描红——临摹——碑贴——自成一体——草
章节复习:
数组:一维,二维,多维
一维:豆角。连续,同一类型。
定义:数据类型[] 数组名=new 数据类型[长度]{.,.,.,.};
赋值:数组名[下标] = 值
取值:数组名[下标]
灵活运用:与for循环的结合应用。
1.求最大值,最小值。
2.求总和,平均。
3.随机(生成下标)抽值。
新课:
数组的应用:
(一).冒泡排序。
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;
取值:
数组名[下标,下标];
应用:
例:这是冒泡排序
static void ccc(string[] args)
{
int[] a = new int[8] { 9, 12, 7, 5, 15, 2, 1, 8 };
//冒泡排序。
for(int i=1;i<=a.Length-1;i++) //趟数
{
for (int j = 1; j <= a.Length - i; j++)//次数
{
if(a[j-1] > a[j])
{
int t = a[j - 1];
a[j - 1] = a[j];
a[j] = t;
}
}
}
//显示
for(int k=0;k<a.Length;k++)
{
Console.WriteLine(a[k]);
}
}
例:折半查找
static void Man(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;
}
}
}
例;二维数组
static void Main (string[] args)
{ 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("学号\t语文\t数学\t总分");
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
Console.Write(a[i, j] + "\t");
}
Console.WriteLine();
}
}
C#6 冒泡 折半查找 二维数组的更多相关文章
- [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组
1.数组基础 1.什么是数组: 同一类型数据的集合,就是一个容器. 2.数组的好处: 可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式: (一 ...
- C#学习笔记04--排序/查找/二维数组/交叉数组
一. 冒泡排序(重点) 思路: 每次比较把较小的放在前面, 大的放到后面; 图解:下图是最坏情况下的排序 ` 冒泡排序m个元素, 就有(m-1)趟排序, 第一趟m-1次, 第二趟 m-2次.... ...
- [软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文
一. 在主函数中实现二维数组的输入. 代码主要函数maxson(),主要利用for()循环先查找出最大字数组的四角的坐标xmin,xmax,ymin,ymax来确定最大子数组, 在循环中算出之和,编写 ...
- 【剑指offer】二分查找二维数组
1 2 3 4 5 6 7 8 9 3 3 1 2 3 4 5 6 7 8 9 10 3 3 12 2 3 4 5 6 7 8 9 10 例子输出: Yes No No 时间限制:1 秒 内存限制:3 ...
- PHP使用array_filter查找二维数组中符合字段和字段值的数据集合
1.方法: /** * 获取符合字段和字段值的数组集合 * @param array $data 待过滤数组 * @param string $field 要查找的字段 * @param $value ...
- 查找二维数组list[][]中的最大的子数组的和
之前做过最大一维数组子数组的和的题目,现在将数组扩展成二维: 代码如下: #include<iostream> #define null -858993460 using namespac ...
- 《剑指offer》查找二维数组内元素 c++
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. cl ...
- PHP 查找二维数组中是否有指定字符串的字段
Array ( ] => Array ( [content] => 您提交了订单,请等待系统确认 :: [operator] => 客户 ) ] => Array ( [con ...
- Java 二维数组,排序、切换顺序,查表法二进制十进制,这班查找、排序(冒泡、选择)、遍历,获取最大小值(4)
Java 二维数组,排序.切换顺序,查表法二进制十进制,折半查找.排序(冒泡.选择).遍历,获取最大小值(4)
随机推荐
- EF 事务处理 (InnoDB Engine的MySQL表也可以)
备忘 1. 亲测(可以嵌套使用) using (TransactionScope scope = new TransactionScope()) { //操作1 XXEntities.Current. ...
- Citrix 服务器虚拟化之十一 Xenserver管理vApps
Citrix 服务器虚拟化之十一 Xenserver管理vApps vApps是把几个业务相关的虚拟机作为一个单一实体管理,把vApps中的虚拟机的称为Application.启动vApps时其中包 ...
- push() & concat()
eg. var arr = []; arr.push(1); arr.push([2, 3]); arr.push(4, 5); arr = arr.concat(6); arr = arr.conc ...
- python运维开发(十四)----HTML基本操作
内容目录: HTML概述 head标签 body中常用标签 css选择器 css常用属性 HTML HTML概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言) ...
- Fiddler 域名过滤
原来一直没意识到Fiddler过滤,导致每次抓包都要自己判断.搜索好多东西,真是呵呵! 过滤设置很简单,看懂一张图就解决问题了. 箭头 那两处设置下,圆圈处保存再进行抓包即可
- MySQL索引背后的数据结构及最左原则
MySQL索引原理 ##索引目的索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql.如果没有索引,那么你可能 ...
- JVM启动过程——JVM之一
JVM是Java程序运行的环境,同时是一个操作系统的一个应用程序进程,因此它有自己的生命周期,也有自己的代码和数据空间. JVM体系主要是两个JVM的内部体系结构分为三个子系统和两大组件,分别是:类装 ...
- QT多重继承的时候,要把QObject放在最前面,否则报错——C++认为人性本恶,默认都是私有的,这点和Delphi的世界观不一样
在买来的控件(没有源码)的基础上,想加入QObject的一些特性,不得不多继承: class MyProgress : public CProgress, public QObject 但总是报错: ...
- linux下设置ip地址 gw网关,dns的方法
本文介绍下,在linux中设置IP地址.网关.dns的方法,有需要的朋友作个参考吧. 设置linux网络的方法有两种:第一种:使用命令修改(直接即时生效) 复制代码代码示例: ip and net ...
- poj 3287 The Trip, 2007_贪心
题意:把一个包放入另一个包内,使得总共要带的件数最少,就是说大包可以装小包,且一个大包只能装一个小包,但是这个小包可以继续装更小的包. 思路:因为相同大小的包不能互相装,所以最小数量就是有相同尺寸的包 ...