IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> day.9 -> 正文阅读

[数据结构与算法]day.9

1.多维数组

多维数组可以看做是数组的数组,比如二维数组就是一个特殊的一维数组,其每个元素都是一个一维数组。

二维数组:

int a[][]=new int [2][5];

解析:以上二维数组a可以看成一个两行五列的数组。(嵌套数组)

int [][]b={{1,2},{2,3}};//相当于[2][2]
for (int i = 0; i <b.length ; i++) {//遍历数组
    for (int j = 0; j <b[i].length ; j++) {
        System.out.print(b[i][j]+" ");
    }
}

2.Arrays类

数组的工具类java.util.Arrays

由于数组对象本身并没有什么方法可以供我们调用,但API中提供一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。

查看JDK帮助文档

Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而不用使用对象来调用(不用不是不能!!!!)

具有以下常用功能:

给数组赋值:通过fill方法

给数组排序:通过sort方法,按升序

比较数组:通过equals方法比较数组中的元素值是否相等

查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。

public static void main(String[] args) {
    int []a={1,2,6,8,999,77,888,555};
    System.out.println(a);//直接输出a是一个对象  [I@1b6d3586
    //打印数组元素
    System.out.println(Arrays.toString(a));//[1, 2, 6, 8, 999, 77, 888, 555]
    System.out.println("==================");
    printArrays(a);//[1, 2, 6, 8, 999, 77, 888, 555]
    Arrays.sort(a);//排序数组元素,升序方式
    printArrays(a);//[1, 2, 6, 8, 77, 555, 888, 999]
    Arrays.fill(a,0);//第一个参数是数组,第二个是所赋的值(这次调用的方法是全体赋值)
    System.out.println(Arrays.toString(a));//[0, 0, 0, 0, 0, 0, 0, 0]
}
//重复造轮子(Arrays.toString方法使用类似)
public static void printArrays(int[]a){
    for (int i = 0; i <a.length ; i++) {
        if(i==0){
            System.out.print("[");
        }
        if(i==a.length-1){
            System.out.print(a[i]+"]");
        }else{
            System.out.print(a[i]+", ");
        }

    }
}

3.冒泡排序

最出名的排序算法之一,总共有八种排序

冒泡的代码还是比较简单的,两层循环,外层冒泡轮数,里层依次比较。

时间复杂度O(n2);

public  static int [] sort(int []arr){
    //外层循环,判断要走多少次
    int temp=0;//建立临时变量
    for (int i = 0; i <arr.length-1 ; i++) {//因为两两比较,则length的长度,比较次数是length-1
        //内层循环,比较判断两个数,如果第一个数比第二个数大,则交换位置
        for (int j = 0; j <arr.length-1-i ; j++) {//每次遍历都要把i减去
            if(arr[j+1]>arr[j]){//(大到小排序)
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
    return arr;
}

4.稀疏数组

要求:编写五子棋游戏中,有存盘退出和上盘的功能。

用二维数组来保存棋子,0表示无棋子,1表示黑棋,2表示白棋。

?

分析问题:因为该二维数组的很多值是默认值0,因此纪录了很多没有意义的数据。

解决方案:稀疏数组。(压缩)

介绍:

当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。

#稀疏数组的处理方式是:

纪录数组一共几行几列,有多少个不同值

把具有不同值的元素和行列几值纪录在一个小规模的数组中,从而缩小程序的规模。

右边的是这个二维数组对应的稀疏矩阵,因为这个数组除了0以外只有8个不同的数字,然后第一行意思是,这是一个6行7列的数组,除0以外有8个不同的值。然后下面几行都是对应这些不同的值,还有他们的坐标,比如:22在第一行,第4列的坐标上,然后数组表示就是[0][3]位置

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 16:22:02  更:2022-01-03 16:23:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:27:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码