菜鸟先飞之JAVA之数组(包含冒泡排序、插入排序、二分法)

本文介绍了Java中数组的基本概念和操作,包括数组的声明、分配空间、赋值和处理数据。详细讲解了如何在保持排序不变的情况下向数组中插入数据,展示了冒泡排序(升序和降序)和插入排序的实现,并提供了二分法查找的代码示例。此外,还涵盖了数组排序和求最值的方法。
摘要由CSDN通过智能技术生成

一、数组

在内存空间划出一串连续的空间(数组是一个变量,存储相同数据类型的一组数据)

数组基本要素:

1、标识符 :驼峰命名规则——>数组名

2、数组元素 ——>值

3、元素下标:从0开始,数组中的每个元素都可以通过下标来访问

4、元素类型:数组中所有元素数据类型相同——>类型(Object[]//最大的数据类型)

5、数组长度(0~长度-1 ——为元素下标)数组名.length(数组长度固定不变,避免数组越界)

二、使用数组的步骤

1、声明数组(就是在内存空间划出一层房间)

int[] a;                     数据类型[] 数组名 = new数据类[大小];

2、分配空间         

 //边声明边赋值不能指定数组长度;

a=new int[5];

scores =new——>分配空间 int[30];

avgAge=new int[6];

name =new String[30];

3、赋值

/*未赋值的情况会有默认值,

整型默认值0,

小数默认值0.0;

char类型默认值空字符;

boolean默认值false;

String默认值null(什么都没有);*/

a[ 0 ]=8;

scroe[0]=89;

int[ ]=scros=={60,80,90,70,85};

int sum =0;

double avg;

for(int i=0//;i<=scores.lenth;i++){

    //sores[i]=input.nextDouble();

    sum=sum+scros[i];

}

avg=sum/scores.length;

集合赋值法:(声明、分配空间和赋值一起)!!!必须在同一个语句中进行;

int a[]={1,2,3,4,5}//这种情况不用new,也不用指定长度;

数组越界;只要不在正常的范围内使用(运行期异常)

4、处理数据

a[ 0 ]=a[ 0 ]*10;

public class Xue5 {
    public static void main(String[] args) {
        //int a;//变量的声明
        //a=1;//变量的赋值、初始化
        //a=2;//变量的重新赋值
        //a++;//变量的运算;
        //System.out.println(a);数据的使用
        int []arr;//数组的声明
        arr=new int[5];//分配空间必须指定长度
        arr[0]=1;//对第一个元素的赋值
        //System.out.println(arr[1]);//未赋值的情况会有默认值,整形默认值0,小数默认值0.0;char类型默认值空字符;boolean默认值false;String默认值null(什么都没有);
        arr[1]=2;//对第二个元素进行赋值
        arr[2]=3;
        arr[3]=4;
        arr[4]=5;
        //arr[5]=6;//数组长度越界
        System.out.println(arr[0]);
    }
}

三、在数组中插入新的数据,要求排序不变

1、将成绩保存在数组中;

2、通过比较找到插入位置

3、该位元素往后移一位

4、插入新成绩

**
 * @Auther Huang qinjie
 * @Date 2020/4/6
 * @Descripion
 * 插入排序
 * 外层从前向后,把一个值当基准值
 * 内层从当前值开始,从后向前,依次比较
 * 比当前值大的,向后移,比当前值小的,当前值在后方插入
 * 如果一直没有插入,则在首位插入
 */
public class Charupaixu{
    public static void main(String[] args) {
        int []a=new int[5];
        Scanner sc=new Scanner(System.in);
        for (int i = 0; i <a.length; i++) {
            a[i]=(int)(Math.random()*100);
            System.out.println("第"+(i+1)+"位学员的成绩:"+a[i]);
        }
        System.out.println(Arrays.toString(a));
        for (int i = 1; i < a.length; i++) {
            int temp=a[i];
            boolean flag=false;
            for (int j = i-1; j>=0; j--) {
                if (a[j]>=temp){
                    a[j+1]=temp;
                    flag=true;
                    break;
                }else{
                    a[j+1]=a[j];
                }
            }
            if (!flag){
                a[0]=temp;
            }
        }
        System.out.println(Arrays.toString(a));
    }
}

四、数组的使用(增删改查)

1、增加元素

2、删除元素

3、修改:重新赋值

4、查询:遍历

// 遍历数组的方法 

方法1: int arr[] = new int[3]; 

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

                System.out.println(arr[a]); 

        }

方法2:for (int a : arr) { System.out.println(a); }

//二分法查找

/**
 * @Auther Huang qinjie
 * @Date 2020/4/6
 * @Descripion
 * 二分查找
 * 从中间开始往两边分解查找     要查找的值——基准值
 * 前提:数值是升序排列
 * 1、找到中间值
 * 2、中间值与中间值进行比较
 * a、基准值与中间值相等,则找到了,break;
 * b、基准值比中间值大,开始下标定为中间值begin=mid;
 * c、基准值比中间值小,结束下标定为中间值end=mid
 * 3、重复上面的过程也没办法符合2.a,则基准值不在数组内;
 * 4、如果数组只剩一个元素
 */
public class Erfenfa {
    public static void main(String[] args) {
        int[]a={1,3,5,7,9,11,13};
        int b=1;
        int end=a.length;//数组的结束位置+1;
        boolean isFind=false;
        for (int begin = 0; begin <end ;) {//如果begin=end,代表数组中已经没有元素l;
            int mid=((begin+end)/2);
            if (b==a[mid]){
                isFind=true;
                System.out.println("在下标为:"+mid+"位置找到:");
                break;
            }else if(b>a[mid]){
                begin=mid;
            }else {
                end=mid;
            }
            if (end-begin==1){
                if (b==a[begin]){
                    isFind=true;//数组只剩一个元素的情况,判断是否是查找的那个数
                    System.out.println("在下标为:0位置找到;");
                }
                break;
            }
        }if (!isFind){
            System.out.println("不存在!");
        }
    }
}

五、数组排序:

1、冒泡排序:双重循环,内层循环每循环一轮,确定一个最值,然后外层循环控制不断的重复内层循环,直到数组有序。

/**
 * @Auther Huang qinjie
 * @Date 2020/4/6
 * @Descripion
 * 冒泡升序
 */
public class MaoPao {
    public static void main(String[] args) {
        int[]a=new int[6];
        for (int i = 0; i < a.length; i++) {
            a[i]=(int)(Math.random()*100);
        }
        System.out.println(Arrays.toString(a));
        for (int i = 0; i <a.length-1 ; i++) {
            for (int j = 0; j <a.length-1-i ; j++) {
               if (a[j]>a[j+1]){
                   int temp=a[j];
                   a[j]=a[j+1];
                   a[j+1]=temp;
               }
            }
        }
        System.out.println(Arrays.toString(a));
    }
}

 //冒泡降序
public class MaoPao{
    public static void main(String[] args) {
        int[]a=new int[6];
        for (int i = 0; i < a.length; i++) {
            a[i]=(int)(Math.random()*100);
        }
        System.out.println(Arrays.toString(a));
        for (int i = 0; i < a.length-1; i++) {
            for (int j = 0; j < a.length-1-i; j++) {
                if (a[j]<a[j+1]){
                    int temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        }
        System.out.println(Arrays.toString(a));
    }
}

六、求最值

打擂台:定义一个变量tmp,与数组的每一个元素进行比较,tmp如果不满足最值的情况,把当前元素重新赋值给tmp。循环结束即可获得最值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值