Java基础记忆(数组的遍历、查找、扩容、排序)

1:什么是遍历数组?

       遍历数组通俗点就是说把数组中的每个数都读一遍。

  •  程序范例
class Demo01{
    public static void main(String[] args){
        ergodic();                   //ergodic:遍历的英文
    }
    public static void ergodic(){
        //int[] arr=new int[]{1,2,3,4,5,6};
        int[] arr={1,2,3,4,5,6};     //创建一个对象为{1,2,3,4,5,6}的数组arr
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");//输出arr[i],i从0~5的对应元素的值
        }
        System.out.println();            //换行
        for(int i=arr.length-1;i>=0;i--){
            System.out.print(arr[i]+" ");//输出arr[i],i从5~0的对应元素的值
        }
    }
}
  • 运行结果 
c:\Users\Administrator\Desktop\javase02>javac Demo01.java
C:\Users\Administrator\Desktop\javase02>java Demo01
1 2 3 4 5 6
6 5 4 3 2 1

 

2: 什么是查找数组?

        简单地就是将一个数赋给key,key在数组中寻找是否存在该数,将该数在数组中对应位置的角标提出。

  1. 线性查找法(find1)
  2. 二分查找法(find2)
  • 程序范例
  • class Demo02{
        public static void main(String[] args){
            find1();            //查找角标===一分查找
            find2();            //查找角标===二分查找
        }
        public static void find1(){
            int[] arr=new int[]{1,3,5,6,2,4};
            int key=7;
            int index=-1;       //定义角标的初值,没有对应角标的值输出角标为-1
            for(int i=0;i<arr.length-1;i++){//从第一个到最后一个开始对比
                if(key==arr[i]){            //判断查找的数有无在数组中存在
                    index=i;                //有的话将角标值赋给index
                    break;                  //跳出当前
                }           
            }
            System.out.println(index+" ");  //输出index结果
        }   
        public static void find2(){
            int[] arr={2,4,7,10,11,45,50,59,60,66,69,70,79};
            int key=70;
            int index=-1;       //定义角标的初值,没有对应角标的值输出角标为-1
            int low=0;          //定义最小角标为0
            int high=arr.length-1; //定义最大角标为数组长度-1
            while(true){        //开启循环
                if(key==arr[(low+high)/2]){ //判断大小角标数之和除2的角标对应的值是否等于该数
                    index=(low+high)/2; //相等即赋值
                    System.out.println(index);
                    break;
                }
                else if(key>arr[(low+high)/2]){
                //若该数大于(大小角标除2在数组中对应的值 )   
                    low=(low+high)/2+1;//(最小角标变成大小角标除2+1)
                }
                else{
                    high=(low+high)/2-1;//(最小角标变成大小角标除2-1)
                }
                if(low>high){//若最小角标在while循环中大于最大角标,即该数不存在数组中
                    System.out.println(index);
                    break;
                }
            }
            
        }
    }
  • 运行结果
c:\Users\Administrator\Desktop\javase02>javac Class29.java
C:\Users\Administrator\Desktop\javase02>java Demo02
-1
8

3:什么是扩容?

      将一个数组的空间扩大或者减小。

class Demo03{
    public static void main(String[] args){
        resize();
    }
    public static void resize(){
        int[] arr=new int[ ]{1,2,3,4,5};
        int deltresize=1; //+1代表扩容,-1代表缩容
        int[] newarr=new int[arr.length+deltresize];
//创建一个new数组newarr,长度为arr长+deltreaize
        for(int i=0;i<Math.min(arr.length,newarr.length);i++){//将arr数组的值赋给new数组
            newarr[i]=arr[i];    //角标对应赋值
        }
        for(int i=0;i<newarr.length;i++){
            System.out.print(newarr[i]+" ");//输出数值newarr的值
        }
    }
}
c:\Users\Administrator\Desktop\javase02>javac Demo03.java
C:\Users\Administrator\Desktop\javase02>java Demo03
1 2 3 4 5 0

4:什么是数组排序?

        将数组中的值由小到大进行排序,排序分为选择排序、冒泡排序、插入排序

  1. 选择排序selectedSort
  •  程序范例与结果
class Demo04{
    public static void main(String[] args){
        selectedSort();//选择排序
        //概念,从角标0开始循环,和后面所以数比,把最小的数换到自身
    }
    public static void selectedSort(){
        int[] nums=new int[]{1,5,6,4,2,3};
        for(int i=0;i<nums.length;i++){//比较数,把最小的换到自身
            for(int j=i+1;j<nums.length;j++){//对比数
                if(nums[i]>nums[j]){
                    int temp=nums[i];
                    nums[i]=nums[j];
                    nums[j]=temp;
                }
            }
        }
        for(int i=0;i<nums.length;i++){
            System.out.print(nums[i]+" ");
        }
    }
}              
               1,5,6,4,2,3
               - -(j)(i+1)
               -   -
               -     -           效果图:将最小的数换到本身
               -       - 
               -         -
               i
c:\Users\Administrator\Desktop\javase02>javac Demo04.java
C:\Users\Administrator\Desktop\javase02>java Demo04
1 2 3 4 5 6

     2.冒泡排序bubbleSort:

  • 程序范例与结果
class Demo05{
    public static void main(String[] args){
        bubbleSort();//在 0-i 范围内,将该范围内最大的数字沉到i
    }
    public static void bubbleSort(){
        int[] nums=new int[]{1,6,3,5,8,2};//创建一个new的nums的数组
        for(int i=0;i<nums.length-1;i++){   //从0~nums.length-1  =========i
            for(int j=0;j<nums.length-i-1;j++){//前后两个角标的值对比,大的数往后移
                if(nums[j]>nums[j+1]){         //大的数移动到最后一项
                    int temp=nums[j];
                    nums[j]=nums[j+1];
                    nums[j+1]=temp;
                }
            }
        }
        for(int i=0;i<nums.length;i++){   //从0~nums.length
            System.out.print(nums[i]+" ");//输出
        }
    }
}
           1,6,3,5,8,2
           - -
             - -
               - -                 效果图:将最大的数换到最后
                 - -
                   - -
c:\Users\Administrator\Desktop\javase02>javac Demo05.java
C:\Users\Administrator\Desktop\javase02>java Demo05
1 2 3 5 6 8

        3.插进排序insertSort:

  •  程序范例与结果
class Demo06{
    public static void main(String[] args){          
        insertSort();//选择排序        
    }
    public static void insertSort(){
        int[] nums=new int[]{6,5,2,3,1,4};//创建一个new的nums数组
        for(int i=1;i<nums.length;i++){   //数组nums从角标1开始往后,主要前后两个角标值对比大小
            for(int j=i;j>0;j--){         //前后角标值对比,j--:角标往左移1,然后继续对比
                if(nums[j-1]>nums[j]){    //前角标值大于后一位时,前后角标值对换
                    int temp=nums[j];
                    nums[j]=nums[j-1];
                    nums[j-1]=temp;
                }               
            }          
        }
        for(int i=0;i<nums.length;i++){   //从0~nums.length
            System.out.print(nums[i]+" ");//打印排序后的值
        }
    }
}
                   <--
                   <---
                   <----                  //效果图
                   <-----
                   <------
c:\Users\Administrator\Desktop\javase02>javac Demo06.java
C:\Users\Administrator\Desktop\javase02>java Demo06
1 2 3 4 5 6

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值