从零双排学java之数组

一.数组的概念

    1.数组是一个容器,用来存储一组数据类型相同的数据.

    2.声明数组的格式:   数据类型[]  数组名 = 初值;   注意:这里的数据类型指的是数组中保存的数据的类型

    3.数组的三种声明格式

     int[]  array = new int[数组的长度];

     int[]  array1 = new int[]{1,2,3,4,5,7};

    int[]   array2={1,3,5,67,8,3};

    4.数组是在堆内存当中开辟一块连续的内存空间


栈内存有两个特点:一是当函数运行完之后会自动释放. 二是先进栈的后出去,后进栈的先出去.

如果数组=null ,这时数组指向的是一个空地址  也会出现异常

NullPointerException

    5.数组的长度一旦确定好之后就不能在更改,  ".length"可以获取数组的长度,数组的存取是

依靠数组的下标进行的,下标从1开始.当输入的下标超出数组的范围是就会爆出数组越界的异常

 ArrayIndexOutOfBoundsException

二.数组的遍历

// 需求: 随机10个数 随机的区间为[15,150]

// 1.把这个10个数放入数组中

// 2.打印最大值/最小值

int[] arr = new int [10];

int max = 0;

int min = 150;

for(int i=0;i<10;i++){

    int random =(int)(Math.random()*(150-15+1)+15);

    arr[i] = random;

}

for(int i=0;i<arr.length;i++){

    if(random>max){

        max=random;

    }

    if(random<min){

        min=random

    }

}

System.out.println("max="+max);

System.out.println("min="+min);

三.反转数组的值

//反转数组的顺序

int arr[]={1,5,6,8,10,12};

int sun = (int)arr.length/2; //得到需要交换的次数

for(int 0;i<sun;i++){

    int temp = arr[i];

    arr[i]=arr[arr.length-1-i];

    arr[arr.length-i-1]=temp;

}

四.数组的排序

1.冒泡排序  数组的中的每一项不停的和下一项进行对比

for(int i=0;i<arr.length-1;i++){  //外层循环控制要比对了多少趟  

    //内循环-1,防止数组越界

    //内循环-1,每循环一次的时候都会确定一个数满足了要求,所以-1  

    for(int j =0;j<arr.length-1-i;j++){ //内层循环控制一趟要比对多少次

        if(arr[j>arr[j+1]){

            int c= arr[j];

            arr[j]=arr[j+1];

            arr[j+1]=c;

        }

    }

}

2.选择排序  //选择一个数和其他的数进行比较

int[] arr={1,5,8,4,2};

for(int i;i<arr.length-1;i++){

    for(int j=1+i;j<arr.length;j++){

        if(arr[i]>arr[j]){

            int c= arr[i];

            arr[i]=arr[j];

            arr[j]=c;

        }

    }

}

五.数组的折半查找

public static void main(String[] args) {

int arr[] = { 1, 22, 33, 44, 55, 66 };

int key = 66;

int minIndex = 0;

int maxIndex = arr.length - 1;

int midIndex = (int) (minIndex + maxIndex) / 2;


while (arr[midIndex] != key) {

if (arr[midIndex] > key) {

maxIndex = midIndex - 1;

midIndex = (int) (minIndex + maxIndex) / 2;

} else {

minIndex = midIndex + 1;

midIndex = (int) (minIndex + maxIndex) / 2;

}

if (minIndex > maxIndex) {

midIndex = -1;

break;

}

}

System.out.println("该值得下标是" + midIndex);


}






猜你喜欢

转载自blog.csdn.net/jsymax/article/details/80230272