Java基础——Java的基本语法(数组、排序)

Java基础知识图解

Java基础知识图解

数组

  1. 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  2. 数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型
  3. 数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量

一维数组声明

在这里插入图片描述

一维数组初始化

在这里插入图片描述

内存结构

内存的基本结构:

在这里插入图片描述

数组声明与赋值:

在这里插入图片描述

多维数组

在这里插入图片描述
在这里插入图片描述

二位数组的声明与赋值内存结构

在这里插入图片描述

数组常用的算法

1.求数组元素的最大值、最小值、平均数、总和等

2.数组的复制、反转
数组复制

int [] arr1 = new int[arr.length];
       for (int i = 0; i<arr.length;i++){
           arr1[i] = arr[i];
       }

数组复制的错误形式:

arr1 =  arr;

解释:只是改了地址指向,相当于粘贴修改arr时arr1也会改变。
在这里插入图片描述

反转的两种方式

for (int i = 0; i < arr.length / 2; i++) {
            int temp = arr[i];
            arr[i] = arr[arr.length - 1 - i];
            arr[arr.length - 1 - i] = temp;
        }
for (int x = 0,  y = arr.length-1; x < y; x++, y--){
            int temp = arr[i];
            arr[x] = arr[y];
            arr[y] = temp;
        }

解析图:
在这里插入图片描述
3.数组元素的排序

数组排序

插入排序
直接插入排序、折半插入排序、Shell排序

交换排序
冒泡排序、快速排序(或分区交换排序)

选择排序
简单选择排序、堆排序

归并排序

基数排序

排序方法的选择

(1)若n较小(如n≤50),可采用直接插入或直接选择排序。
当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插入,应选直接选择排序为宜。

(2)若文件初始状态基本有序(指正序),则应选用直接插入、冒泡或随机的快速排序为宜;

(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
空间复杂度与时间复杂度:
空间复杂度指的是排序需要的占用的空间。
时间复杂度指的是排序需要使用的时间。

冒泡排序

排序思想:
相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其它的数进行类似操作。
在这里插入图片描述

 int[] arr = {1, 4, 3, 2, 5};
        // 数组长度为5需要遍历4次
        for (int i = 0; i < arr.length - 1; i++) {
            // 数组长度为5需要比较4次,每次比较都会排出一个最大值在最后,所以-i
            for (int j = 0; j < arr.length - 1 - i; j++) {
                // 前一个后一个比较如果符合条件,交换位置
                if (arr[j] > arr[j + 1]) {
                    int small = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = small;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
直接选择排序

排序思想:将待排序的元素分为已排序(初始为空)和未排序两组,依次将未排序的元素中值最小的元素放入已排序的组中。

直接选择排序简单直观,但性能略差;堆排序是一种较为高效的选择排序方法,但实现起来略微复杂
在这里插入图片描述

int[] arr = {1, 4, 3, 2, 5};
        // 数组长度为5需要遍历4次
        for (int i = 0; i < arr.length - 1; i++) {
            // 初始化t
            int t = i;
            // j=i 每一次循环就会选出一个最小的,那么就可以从第二个开始就是i
            // 选择出一个arr[t]与数组比较(并不是数组的arr[t],是取出来的),需要比较5次故不length-1
            for (int j = i; j < arr.length; j++) {
                // 如果当前t与每一个比较,得出最小的index
                if (arr[t] > arr[j]) {
                    t = j;
                }

            }
            // 如果t改变交换位置,如果没有该别t最小
            if (t != i) {
                int max = arr[t];
                arr[t] = arr[i];
                arr[i] = max;
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
数组排序

在这里插入图片描述

操作数组的工具类:Arrays

在这里插入图片描述

数组操作常见问题

在这里插入图片描述

如果没有良好的环境,那么继续独处吧。

2018-11-2 你坚持巩固的第三天。

猜你喜欢

转载自blog.csdn.net/abelboy/article/details/83651142