[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 ...
随机推荐
- rancher 2.X 搭建小型web集群+mysql主从复制
一,环境配置 rancher 2.1.6 二,配置harbor私有仓库 见上文 三,配置私有镜像 01,总文件 dockerfile 为主配置文件,html 为站点文件wordpress.,官网 ...
- 学习javscript对象笔记(一)
对象(Objects) 对象属性值可以是除undefined值之外的任意值 1.对象字面量 a.{} b.new object(); 注意事项: 在对象字面量中,如果属性名是一个合法的javasc ...
- Xlua文件在热更新中调用方法
Xlua文件在热更新中调用方法 public class news : MonoBehaviour { LuaEnv luaEnv;//定义Lua初始变量 void Awake() { luaEnv ...
- ElasticSearch mapping中字段属性总结
- python中时间对象生成及时间格式的转换
1.将字符串的时间转换为时间戳 方法: a = "2013-10-10 23:40:00" 将其转换为时间数组 import time timeArray = time.strpt ...
- nginx location 配置阐述优先级别使用说明
使用nginx 有大半年了,它的高性能,稳定性表现很好. 这里也得到很多人的认可. 其中它的配置,有点像写程序一样,每行命令结尾一个";"号,语句块用"{}"括 ...
- Beyond Compare 4试用期已过
Beyond Compare 很好用,但是只有一段时间的试用时间,当试用期过了之后就提示不能试用了 怎么办呢? 我在网上找到了两个方法: 1.直接用注册码(来自:https://blog.csdn.n ...
- postgres formencode.api.Invalid
错误提示: Invalid: expected an int in the IntCol 'geom', got <type 'str'> '010100000007EBFFFC3A611 ...
- angular 首屏优化
前一段时间把公司的一个angular项目做了一次大的优化,记录一下过程. 起因: 起因是用户反映网站加载时间过长,从loading画面显示到页面可响应要13s,对于一般的页面恐怕没有用户愿意等待这么久 ...
- js- 引用和复制(传值和传址)
js- 引用和复制(传值和传址) 好像一般很少人讲到js中的引用和复制,不过弄清楚这个概念可以帮助理解很多东西 先讲一下很基础的东西,看看js中几种数据类型分别传的什么引用:对象.数组.函数复制:数字 ...