一、二维数组

多维数组可以看成以数组为元素的数组。可以有二维、三维、甚至更多维数组,但是实际开发中用的非常少。最多到二维数组(我们一般使用容器代替,二维数组用的都很少)。

【代码示例】

 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-星期三] 数组_二维数组&冒泡排序&二分查找的更多相关文章

  1. 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)

    二维数组,锯齿数组和集合 一.二维数组 二维数组:一维数组----豆角二维数组----表格 定义:1.一维数组:数据类型[] 数组变量名 = new 数据类型[数组长度];数据类型[] 数组变量名 = ...

  2. c++指针数组与二维数组的最大区别

    下面随笔是关于指针数组说明及与二维数组的最大区别. 指针数组 数组的元素是指针型 例 利用指针数组存放矩阵 1 #include 2 using namespace std; 3 int main() ...

  3. C#的一维数组和二维数组定义方式:

    一维数组: //一维数组定义与初始化 ,, };//第一种方式 , , }; //第二种方式 int[] one3; //第三种方式 one3=,,}; 二维数组: //二维数组定义与初始化 //不规 ...

  4. C# 数组、一维数组、二维数组、多维数组、锯齿数组

    C#  数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请 ...

  5. c#简单实现二维数组和二维数组列表List&lt;&gt;的转置

    刚看到网上一篇文章里用sql实现了行列转置.sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现.提到转置,立刻想起还在求学阶段曾经做 ...

  6. java - day005 - 数组工具类, 数组复制,二维数组,变量,方法, 面向对象

    1. java.util.Arrays  数组工具类    Arrays.toString (数组) 数组值链接字符串 Arrays.sort(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...

  7. Java数组之二维数组

    Java中除了一维数组外,还有二维数组,三维数组等多维数组.本文以介绍二维数组来了解多维数组. 1.二维数组的基础 二维数组的定义:二维数组就是数组的数组,数组里的元素也是数组. 二维数组表示行列二维 ...

  8. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))    二维数组(二维数组的遍历.排序.查找.定义. ...

  9. JS中:数组和二维数组、MAP、Set和枚举的使用

    1.数组和二维数组:   方法一: var names = ['Michael', 'Bob', 'Tracy']; names[0];// 'Michael' 方法二: var mycars=new ...

随机推荐

  1. mysqldump 命令使用

    常见选项:--all-databases, -A: 备份所有数据库--databases, -B: 用于备份多个数据库,如果没有该选项,mysqldump把第一个名字参数作为数据库名,后面的作为表名. ...

  2. (转) sync命令

    sync sync命令 sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息. 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的 ...

  3. mac上k8s学习踩坑

    本文学习k8s参考内容:http://docs.kubernetes.org.cn/126.html,学习过程中遇到一些坑,记录如下: -------------------------------- ...

  4. java里面的package/import 和PHP里面的namespace/use 是一模一样的吗

    java里面的package/import 和PHP里面的namespace/use 是一模一样的吗? java: php package mypage; namespace mypage; impo ...

  5. URAL —— 1255 & HDU 5100——Chessboard ——————【数学规律】

    用 k × 1 的矩形覆盖 n × n 的正方形棋盘 用 k × 1 的小矩形覆盖一个 n × n 的正方形棋盘,往往不能实现完全覆盖(比如,有时候 n × n 甚至根本就不是 k 的整倍数). 解题 ...

  6. nyoj 1023——还是回文——————【区间dp】

    还是回文 时间限制:2000 ms  |  内存限制:65535 KB 难度:3   描述 判断回文串很简单,把字符串变成回文串也不难.现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一 ...

  7. git每次提交都输入密码

    打开gitbash执行即可 git config --global credential.helper store 长期储存密码,因为git默认是不储存密码的,不执行这条命令的话每次更新代码,或者提交 ...

  8. Ling之select

    select用法: 1.Dictionary<string, string>转json Newtonsoft.Json.JsonConvert.SerializeObject(dicSub ...

  9. python爬虫学习(一)

    #简单例子:抓取网页全部内容后,根据正则表达式,获取符合条件的字符串列表from urllib import request#正则表达式import re url = "http://www ...

  10. servlet中this.getServletContext(); this.getServletConfig().getServletContext(); 的区别

    WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用.ServletConfig对象中维护了ServletContext对象的引用,开发人 ...