首页 > 编程语言 >Java学习笔记day4--数组算法(赋值,复制,反转,排序,查找)

Java学习笔记day4--数组算法(赋值,复制,反转,排序,查找)

时间:2022-11-04 17:34:21浏览次数:42  
标签:Java -- day4 30 int 算法 数组 number1 排序

package day4_array;

public class AlgorithmArray {
    public static void main(String[] args) {
        
        //数组赋值问题======================================================================
        /*
         *第1题好题
         创建一个长度为6的int型数组,要求数组元素值都在1-30之间,且是随机附赠,要求元素各个值不相等
         */
        int [] number=new int[30];//为了测试代码准确性,使得数组长度为30,检测是否每个数组元素值都在1-30之间且无重复
        for(int i=0;i<number.length;i++) {
            number[i]=(int)(Math.random()*30+1);
            for(int j=0;j<i;j++) {
                if(number[i]==number[j]) {
                    i--;//****************神了!****************************
                    break;
                }
            }    
        }
        for(int i=0;i<number.length;i++) {
            System.out.print(number[i]+"\t");
            for(int j=0;j<i;j++) {            //输出检测有无重复元素
                if(number[i]==number[j]) {
                    System.out.print("false");
                    break;
                }
            }
        }
        
        
        /*
         * 第三题:
         定义一个int类型的一维数组,包含十个元素,分别赋一些随机整数
         然后求出所有元素的最大值,最小值,和值,平均值并输出出来
         要求:所有的随机数都是两位数
         */
        System.out.println();
        int[] arr=new int[10];
        int sum,max,min;
        double average;
        sum=max=0;
        min=99;//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        for(int i=0;i<arr.length;i++) {
            arr[i]=(int)(Math.random()*90+10);//random随机生成[0.0,1.0)的浮点数
            sum+=arr[i];
            if(arr[i]>max) {
                max=arr[i];
            }
            if(arr[i]<min) {
                min=arr[i];
            }System.out.print(arr[i]+" ");
        }System.out.println();
        average=sum/10.0;
        System.out.println("最大值是:"+max+",最小值是:"+min+",和值是:"+sum+",平均值是:"+average);
        
        //数组的复制、反转、查找问题======================================================================
        /*
         第4题:不能称作数组的复制!!!!!!!堆空间中只有一个数组的内存空间
         声明array1和array2两个变量,它们是int类型的数组
         使用大括号把array1初始化为8个常数:2,3,5,7,11,13,17,19
         赋值array2变量等于array1,修改array2中的偶索引值,使其等于索引值,如按array2[0]=0
         显示array1的内容
         思考:array1和array2什么关系?
         */
        int[] array1=new int[] {2,3,5,7,11,13,17,19};
        int []array2;
        array2=array1;//数组变量array1和array2相等,指向同一片内存空间
        for(int i=0;i<array1.length;i++) {
            if(i%2==0) {
                array2[i]=i;//修改array2后,array1也随之改变
            }
            System.out.print(array1[i]+" ");
        }
        
        //数组复制======================================================================
        int[] array3=new int[array1.length];
        for(int i=0;i<array1.length;i++) {
            array3[i]=array1[i];
        }
        
        //数组反转====================================================================
        System.out.println();
        String[] array4=new String[] {"java","爱","我","hhh","不会吧","不会吧"};
        for(int i=0;i<array4.length/2;i++) {
            String temp=array4[i];
            array4[i]=array4[array4.length-1-i];
            array4[array4.length-1-i]=temp;
        }
        for(int i=0;i<array4.length;i++) {
            System.out.print(array4[i]+" ");
        }
        
        //数组元素的查找================================================================
        //1.线性查找(从前往后一个个查,地毯式搜索)
        String dest="我";
        int index=0;
        boolean isExit=false;
        System.out.println();
        for(int i=0;i<array4.length;i++) {
            if(array4[i]==dest) {
                index=i;
                isExit=true;
                break;
            }
        }if(isExit) {
            System.out.println("找到了指定的元素,位置为:"+index);
        }else {
            System.out.println("没有找到这个元素");
        }
        //2.二分法查找(适用于有序数组)***************************************
        int[] number0=new int[] {2,5,7,8,10,15,18,20,22,25,28};
        int dest1=21;//查找元素
        int head=0;//初始首索引
        int end=number0.length-1;//初始末索引
        boolean isExit0=false;
        while(head<=end) {
            int middle=(head+end)/2;
            if(dest1<number0[middle]) {
                end=middle-1;
            }else if(dest1>number0[middle]) {
                head=middle+1;
            }else {
                isExit0=true;
                System.out.println("找到了目标元素,他的位置在:"+middle);
                break;
            }
        }if(isExit0==false) {
            System.out.println("没有找到这个元素");
        }
        
        //排序算法=============================================================================
        /*
        时间复杂度&空间复杂度;
        稳定性:如果AB相等,排序后AB次序不变,则称这个排序算法为稳定的
        十大内部排序算法(内部是指不涉及存储器):
            选择排序:直接选择,堆排序
            交换排序:冒泡排序,快速排序
            插入排序:直接插入,折半插入,shell排序
            归并排序
            桶式排序
            基数排序
         */
        //1.普通排序
        int[] number1=new int[] {34,12,54,2,6,45,88,6,89,9,4,36,55,78};
        for(int i=0;i<number1.length-1;i++) {
            for(int j=i+1;j<number1.length;j++) {
                if(number1[i]>number1[j]) {
                    int temp=number1[i];
                    number1[i]=number1[j];
                    number1[j]=temp;
                }
            }
        }for(int i=0;i<number1.length;i++) {
            System.out.print(number1[i]+" ");
        }
        //冒泡排序******************************************
        System.out.println();
        for(int i=0;i<number1.length-1;i++) {
            for(int j=0;j<number1.length-i-1;j++) {
                if(number1[j]>number1[j+1]) {
                    int tmep=number1[j];
                    number1[j]=number1[j+1];
                    number1[j+1]=tmep;
                }
            }
        }for(int i=0;i<number1.length;i++) {
            System.out.print(number1[i]+" ");
        }//***********************************************
        //快速排序:最快的内部排序法之一!(堆排序,归并排序)
        
    }
}

 

标签:Java,--,day4,30,int,算法,数组,number1,排序
From: https://www.cnblogs.com/NGZS/p/16858543.html

相关文章

  • mac linux 查看端口占用情况
    maclsof-i:8080nodejs项目,启动初问题了,终断后,老出现,端口占用启动不了的情况linux1.也可以用lsof-i:端口号----发现有的linux服务器不支持lsofnetstat-ntl......
  • (maven)报错
    ......
  • pidstat
    主要作用:查看线程top查看线程top-Hp[pid号例如:1397]iotop查看线程iotppidstat详细使用pidstatpidstat-u-pALLpidstat-tpidstat:该命令等同于pidstat-u......
  • 微信公众号开发异常码及异常原因汇总
    返回码说明-1系统繁忙,此时请开发者稍候再试0请求成功40001获取access_token时AppSecret错误,或者access_token无效。请开发者认真比对AppSecret的正......
  • 今日总结
    754.到达终点数字找规律;target=Math.abs(target);目标值无需管正负,因为只需要加一个负号即可intsum=0;intindex=0;while(sum<target){直到大于target为止......
  • 视频融合平台EasyCVR各项数据正常,却无法用海康NVR接入是什么原因?
    EasyCVR视频融合云平台开放度高、兼容性强、可支持灵活拓展与第三方集成,目前已经成为安防市场主流的视频能力层服务平台。平台可支持多协议、多类型的设备接入,包括国标GB28......
  • (maven)继承
    父类中pom.xml子类中pom.xml//*******************************************************************************************<projectxmlns="http://maven.apache.org/P......
  • Java学习笔记day4--数组常见异常Exception
    packageday4_array;/**数组中的常见异常:1.数组角标越界的异常ArrayIndexOutOfBoundsException2.空指针异常NullPointerException*/publiccla......
  • 编码解码
    /**编码:字符串变成字节数组*解码:字节数组变字符串**String-->byte[];str.getBytes(charsetName);**byte[]-->String;newString(byte[],charsetName)*/......
  • 客户端向服务端发送信息
    /**演示TCP传输*1.分客户端对应对象Socket、服务端对应ServerSocket*///需求:给服务端发送一个文本数据/*步骤:*1.创建Socket服务,并指定要连接的主机和端口*......