[19/03/13-星期三] 数组_二维数组&冒泡排序&二分查找
一、二维数组
多维数组可以看成以数组为元素的数组。可以有二维、三维、甚至更多维数组,但是实际开发中用的非常少。最多到二维数组(我们一般使用容器代替,二维数组用的都很少)。
【代码示例】
import java.util.*;
public class Test_0313_01
{
public static void main(String[] args)
{
//1、 Java中多维数组的声明和初始化应按从低维到高维的顺序进行 int a1[][]=new int[][4];//非法
//int a[][]=new int[2][3];//二维数组声明 2行(下标0-2) 3列(下标0-3)
int b[][]={ { 1, 2, 3 }, { 3, 4 }, { 3, 5, 6, 7 } };// 二维数组的静态初始化
System.out.println(b[2][3]); int a[][] = new int[3][]; //动态初始化
// a[0] = {1,2,5}; //错误,没有声明类型就初始化
a[0] = new int[] { 1, 2 };
a[1] = new int[] { 2, 2 };
a[2] = new int[] { 2, 2, 3, 4 };
System.out.println(a[2][3]);
System.out.println(Arrays.toString(a[0]));
System.out.println(Arrays.toString(a[1]));
System.out.println(Arrays.toString(a[2]));
int c[][]=new int[][] {{2,3,5},{34,7},{4,5,6}};
System.out.println(Arrays.toString(c[0]));//注意:ArrayIndexOutBoundsException 数组下标越界
System.out.println(c[1][1]);//c[1][1]代表先找第2行即{34,7},然后从中第2列即数字7。 }
}
【内存分析】
【示例】
import java.util.*; public class Test_0313_02
{
public static void main(String[] args)
{
Object[] emp1={101,"小白",29,"讲师","2016.2.9"};//每一行可以使用一个一维数组存储:
Object[] emp2={102,"老李",39,"教授","2006.4.9"};
Object[] emp3={103,"老王",35,"高工","2017.4.9"}; Object table[][]=new Object[3][];
table[0]=emp1;
table[1]=emp2;
table[2]=emp3; for(Object[] temp:table){
System.out.println(Arrays.toString(temp));
} }
}
二、冒泡排序
思想:算法重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,这样越大的元素会经由交换慢慢“浮”到数列的顶端。
【代码示例】
import java.util.*;
public class Test_0313_03 {
public static void main(String[] args) {
int a[]={3, 1, 6, 2, 9, 0, 7, 4, 5, 8}; //外层核心,控制轮数。即当j=0时为第1轮会把最大的数9放在最后。当j=1为第2轮会把次大的数字8放在倒数第2位,依次类推
for(int j=0;j<a.length-1;j++ ){ boolean flag=true;//此处是为了优化算法 //内层核心,可以实现的某轮最大的值移动到后面
for(int i=0;i<a.length-1-j;i++){// 1、注意是a.length-1=9(其中a.length=10),i可以实现从0变化到8
//2、-j是为了提升效率,j代表轮数,即后边的数字已经排序好了,不用在此遍历排序了,j越增大代表又排好一轮
if(a[i]>a[i+1]){//i在数组中的最大值为9,若上步是i<a.length(=10,即i可以取到9),则在此步中会异常,因为i+1可以=10,但数组中没有
int temp=a[i];//先把a[i]的值存起来
a[i]=a[i+1];//然后把a[i+1]的值覆盖a[i],此时a[i]的值已经发生变化
a[i+1]=temp;//把原来存在temp中的a[i]值给a[i+1],此时完成交换 flag=false;//即若发生过交换(即执行完上边3行,否则也不会到这里来),把flag置为false,若没有发生过交换,还是默认为true
//没发生过交换代表a[i]<a[i+1]符合要求
}
} if(flag==true)//第6轮循环(即j=5)后,没有发生过交换即flag不可能为false,代表第5轮完成后已经排好序,否则肯定有交换
break;//从而可以直接结束全部循环,不会执行下边的代码。
System.out.println(Arrays.toString(a));//输出的最后一行为第5轮排好序的结果 }
}
}
三、二分查找
二分法检索(binary search)又称折半检索,二分法检索的基本思想是设数组中的元素从小到大有序地存放在数组(array)中,首先将给定值key与数组中间位置上元素的关键码(key)
比较,如果相等,则检索成功; 否则,若key小,则在数组前半部分中继续进行二分法检索;若key大,则在数组后半部分中继续进行二分法检索。这样,经过一次比较就缩小一半的
检索区间,如此进行下去,直到检索成功或检索失败。
【代码示例】
import java.util.*; //二分查找 方法BinarySearch public class Test_0313_04 { public static int binarySearch(int arr[], int value){ int low=0, high=arr.length-1;//low和high为数组的下标 while(low<=high){
int mid=(low+high)/2; //mid是写在这里是动态变化的,写在外边mid是恒定的是不会返回-1的
if(value==arr[mid])//恰好为中间数
return mid;
if(value>arr[mid])//比中间数大
low=mid+1;
if(value<arr[mid])//比中间数小
high=mid-1;
} return -1;
}
public static void main(String[] args) {
int a[]={2,5,1,4,6,7,12,8,3}; System.out.println(Arrays.toString(a)); Arrays.sort(a); System.out.println(Arrays.toString(a)); System.out.println(binarySearch(a,5)); System.out.println(binarySearch(a,17)); } }
[19/03/13-星期三] 数组_二维数组&冒泡排序&二分查找的更多相关文章
- 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)
二维数组,锯齿数组和集合 一.二维数组 二维数组:一维数组----豆角二维数组----表格 定义:1.一维数组:数据类型[] 数组变量名 = new 数据类型[数组长度];数据类型[] 数组变量名 = ...
- c++指针数组与二维数组的最大区别
下面随笔是关于指针数组说明及与二维数组的最大区别. 指针数组 数组的元素是指针型 例 利用指针数组存放矩阵 1 #include 2 using namespace std; 3 int main() ...
- C#的一维数组和二维数组定义方式:
一维数组: //一维数组定义与初始化 ,, };//第一种方式 , , }; //第二种方式 int[] one3; //第三种方式 one3=,,}; 二维数组: //二维数组定义与初始化 //不规 ...
- C# 数组、一维数组、二维数组、多维数组、锯齿数组
C# 数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请 ...
- c#简单实现二维数组和二维数组列表List<>的转置
刚看到网上一篇文章里用sql实现了行列转置.sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现.提到转置,立刻想起还在求学阶段曾经做 ...
- java - day005 - 数组工具类, 数组复制,二维数组,变量,方法, 面向对象
1. java.util.Arrays 数组工具类 Arrays.toString (数组) 数组值链接字符串 Arrays.sort(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...
- Java数组之二维数组
Java中除了一维数组外,还有二维数组,三维数组等多维数组.本文以介绍二维数组来了解多维数组. 1.二维数组的基础 二维数组的定义:二维数组就是数组的数组,数组里的元素也是数组. 二维数组表示行列二维 ...
- java基础5 (一维)数组和二维数组
本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等)) 二维数组(二维数组的遍历.排序.查找.定义. ...
- JS中:数组和二维数组、MAP、Set和枚举的使用
1.数组和二维数组: 方法一: var names = ['Michael', 'Bob', 'Tracy']; names[0];// 'Michael' 方法二: var mycars=new ...
随机推荐
- linux 命令之重定向
linux 重定向及部分命令 一,重定向讲解: 1> 标准输出重定向 覆盖原有内容 慎用!!!!!! 1>> 标准输出追加重定向 追加内容 2> 错误输出重定向 只输出错误信息 ...
- Tortoise SVN 快速操作手册
1.库的存储结构 版本库文件结构如图所示: Code文件夹为源码文件夹,doc为文档目录文件夹, 1.1 branch:分枝文件夹 当多个人合作,可能有这样的情况出现:John突然有个想法,跟原先的设 ...
- 九度oj题目1181:遍历链表
题目1181:遍历链表 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2600 解决:1125 题目描述: 建立一个升序链表并遍历输出. 输入: 输入的每个案例中第一行包括1个整数:n(1 ...
- H5禁止页面滑动/滚动
禁止页面滚动--完美解决方案,滚动条显示与否,手持设备兼容与否 禁止页面滚动 有三种方法 1,依靠css 将页面 document.documentElement.style.overflow='hi ...
- zstu 4212 ——String Game ——————【字符串处理】
4212: String Game Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 337 Solved: 41 Description Alice a ...
- hdu 3265 矩形剪块面积并
http://acm.hust.edu.cn/vjudge/problem/10769 给n张海报,在每张海报上剪掉一个矩形,求面积并 把剪块的海报分成四个矩形,就是普通的求面积并问题了 #inclu ...
- webpack缓存
缓存 缓存如何工作 1.当缓存客户端需要访问数据时,它首先检查缓存.当在缓存中找到所请求的数据时,它被称为缓存命中. 2.如果在缓存中找不到请求的数据 , 称为缓存未命中的情况,它将从主存储器中提取并 ...
- all-to-mqtt
- OSGi Bundle
OSGi Framework looks like OS, Bundle looks like program, OS can create a process to run program with ...
- JQuery Tips
另一篇文章 JavaScript Tips 1. 获取span标签的值需要用text(); 2. datepicker控件的‘setDate’属性可用于设置默认值: 3. 使用parseFloat转换 ...