Gorilla带您学java之数组

数组

一维数组

一维数组是保存一组相同数据类型的元素的容器
总结来说有三种创建方式
方式一:

int[] array = new int[10];
// 只是说明这是一个有10个元素的数组,并没有赋值

方式二

int[] array = new int[] { 1, 2, 3, 4, 5 };
// 创建并赋值

方式三

int[] array1 = { 1, 3, 4, 5, 6 };
// 简化创建法

注意:数组的长度一旦确定就不能改变
给数组赋值:
因为数组是很多元素组合而成的,所以就需要用循环来一个一个赋值,就是要遍历数组
比如用for循环

int[] array = new int[5];
for (int i = 0; i < array.length; i++) {
    array[i] = i;
}
// 这样就可以给数组array中的每个数赋值

数组取值
同理了解了如何给数组赋值,那么取值顾名思义,只需array[您所需值得下标] 即可;

数组的创建呢是在栈内存中先定义一个array,然后去堆内存中分配空间并将此转化为16进制地址传给栈内存中,大致如下图
堆栈内存存储一个数组

数组排序

下面说说三种数组排序:冒泡排序,选择排序,折半查找
1.冒泡排序
顾名思义就是像在水中的泡泡一样一个一个浮上来,冒泡排序也是这个意思。将最大或者最小的值一个一个放到数组的最后。
下面我们来看看代码:

// 首先先定义一个数组
int[] array = new int[] { 3, 2, 5, 1 };
// 外层循环控制走多少趟
for (int i = 0; i < array.length - 1; i++) {
    // 内存循环控制每趟当中的比较
    for (int j = 0; j < array.length - 1 - i; j++) {
        // 当前一个数比后一个数大的时候,交换两个数
        if (array[j] > array[j + 1]) {
            int temp = array[j];
            array[j] = array[j + 1];
            array[j + 1] = temp;
        }
    }
}

这样控制台将会打印:

[1, 2, 3, 5]

这就是冒泡排序。
2.选择排序
选择排序呢就是从第一个数开始,一个个与后面的数比较,如第一个和第二个数比较,第一个数大,那么交换,然后第一个数和第三个数比较,第三个数大,不交换以此类推。一趟下来第一个数将是最小的
代码实现:

int[] array = new int[] { 3, 2, 5, 1 };
for (int i = 0; i < array.length - 1; i++) {
    for (int j = i + 1; j < array.length; j++) {
        if (array[i] > array[j]) {
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
}

这样控制台将会打印:

[1, 2, 3, 5]

3.折半查找
折半查找呢就是比如给你个有序的一大推数,然后你在脑海中想一个数,我来猜,首先我会猜最中间那个,并问你是大了还是小了,大了的话就会选择这个数和第一个数中间值来继续,以此类推。
代码实现:

public static void main(String[] args) {
    int[] array = new int[] {1, 22, 33, 44, 55, 66, 77, 88};
    System.out.println(findArrayIndex(array, 88));
}
public static int findArrayIndex(int[] arr, int key) {
    int minIndex = 0;
    int maxIndex = arr.length - 1;
    int midIndex = (minIndex + maxIndex) / 2;
    while (arr[midIndex] != key) {
        if (arr[midIndex] > key) {
            maxIndex = midIndex - 1;
            midIndex = (minIndex + maxIndex) / 2;
        }
        if (arr[midIndex] < key) {
            minIndex = midIndex + 1;
            midIndex = (minIndex + maxIndex) / 2;
        }
        if (minIndex > maxIndex) {
            return -1;
        }
    }
    return midIndex;
}

我使用了函数的封装调用来实现的
这样控制台将会打印:

7

看完是不是有所收获呢,点个赞再走吧OuO。

猜你喜欢

转载自blog.csdn.net/qq_37113621/article/details/81986718
今日推荐