• 数组的一些知识点和插入选择冒泡排序


    package test.sghuzu;

    import java.lang.reflect.Array;
    import java.util.Arrays;

    public class Test1 {
        /**
         Java中的内存分配
         Java程序在运行时,需要在内存中分配空间。
         为了提高效率,对每一片空间都进行了划分,因为每一片1区域都有特定的处理数据方式和内存管理方式
        
             栈  存储局部变量
             堆  存储new出来的东西
             方法区  暂时不管
             本地方法区  系统有关,不管
             寄存器  给CPU使用,也不管
             
                 局部变量,在方法中定义或者方法中声明的变量都是局部变量
             
             
                 栈内存的特点:
                     每一个new出来的东西都有地址值
                     每一个变量都有默认值
                         byte,short,int,long 0
                         float,double 0.0
                         char 'u0000'
                         boolean false
                     使用完毕就变成了垃圾,但是并没有立即回收。会在垃圾回收器空闲的时候回收
                     栈内存中的值数据用完就释放掉。
         */
        
        /*
              数组声明:
                  数据类型[] 数组名;
                  数据类型   数组名[];
                  两种方式效果一样,读法不同,第一个叫做一个名为数组名的数据类型数组,第二种叫做一个数据类型的 数组变量数组名。第二种更早,现在一般用第一种
                  
              数组的初始化:
                  两种初始化方式的区别在于数组的长度。第一种是自己固定数组长度,初始值由系统的默认值填充;第二种是自己固定数组的值,数组的长度由系统根据数组的值确定
                  动态初始化:
                      例子: int[] arr=new int[3];
                  静态初始化:
                      例子:int[] arr=new int[]{1,2,3};
                      上面这种形式不常用了,我们一般喜欢使用它的简写形式:
                           int[] arr={1,2,3};
                          
              值得注意的是:静态初始化数组实际上也是new声明的,不过是在声明赋了初始默认值后使用你给的值替代原来的默认值。和一些数组长度的不同控制
              
              数组的遍历,数组中的元素使用下标来指定并做一系列操作。数组名.length得到数组的长度。
          
         */
        
        /*
         * 求最值:
         以求最大值为例,选出一个数组中的值为参照物,依次使用其他的数组元素和它进行比较,比它大的取代它和剩下的元素进行比较,剩下的就是最大的元素了
        */
        /*
         逆序:
         新建一个类型和长度都和原数组相同的数组,for循环依次输出原数组的元素,并将元素赋值给新数组位置为数组长度-旧数组现在下标位置的元素
         */
        /*
         数组中元素从大到小排序
         */
        public static void main(String[] args){
            int[] arr=new int[]{43,12,46,23,45,12,98};
            
            /*int[] arr1=rebackArr(arr);
            iteratorArrForEach(arr);
            System.out.println();
            iteratorArr(arr1);*/
            
            /*int[] arr1=SortMaxToMin(arr);    
            iteratorArrForEach(arr);
            System.out.println();
            iteratorArr(arr1);*/
            iteratorArrForEach(arr);
            
            //SortMaxToMin3(arr);
            System.out.println();
            iteratorArrForEach(arr);
            
        }
        
        public static void iteratorArr(int[] arr){
            for(int i=0;i<arr.length;i++){
                System.out.print(arr[i]+" ");
            }
        }
        public static void iteratorArrForEach(int[] arr){
            for(int i=0;i<arr.length;i++){
                System.out.print(arr[i]+" ");
            }
        }
        
        public static int getMax(int[] arr){
            int max=arr[0];
            
            for(int i=1;i<arr.length;i++){
                if(arr[i]>arr[i-1]){
                    max=arr[i];
                }
            }
            return max;
        }
        
        public static int getMin(int[] arr){
            int min=arr[0];
            
            for(int i=1;i<arr.length;i++){
                if(arr[i]<arr[i-1]){
                    min=arr[i];
                }
            }
            return min;
        }
        
        public static int[] rebackArr(int[] arr){
            int[] arr1=new int[arr.length];
            for(int i=0,j=arr.length-1;i<arr.length;i++,j--){
                arr1[i]=arr[j];
            }
            return arr1;    
        }
        
        public static  int[] SortMaxToMin(int[] arr){
            /**
             * 利用的是前面求最值的思路,应该是选择排序吧!
             *
             */
            /**
             * 一般进行数组的排序都将改变原来数组的位置。因为数组是引用数据类型,针对同一个堆内存地址的改变。所以需要将原来数组的元素全部放入另一个数组之内
             * ,操作另一个数组进行排序才会不改变原来数组。注意,新数组不能是调用原数组的引用
             */
            int[] arr1=Arrays.copyOf(arr, arr.length);
            //iteratorArr(arr1);
            //int[] arr1=new int[arr.length];
            /*for(int i=0;i<arr.length;i++){
                arr1[i]=arr[i];
            }*/
            for(int j=0;j<arr1.length;j++){
                for(int i=j+1;i<arr1.length;i++){                
                    if(arr1[i]>arr1[j]){
                        arr1[j]=arr1[j]^arr1[i];    
                        arr1[i]=arr1[j]^arr1[i];
                        arr1[j]=arr1[j]^arr1[i];                    
                    }
                }
                
            }
            return arr1;
        }
        public static   int[] SortMaxToMin1(int[] arr){
            /**
             * 选择排序,第一个开始,元素与它右边的元素比较,大的向右跑,一轮下来,最大的数就是最后面的
             * 接下来就是循环了,依旧进行一样的循环
             *
             for(int i=0;i<arr.length;i++){
                for(int j=1;j<arr.length;j++){
                    if(arr[j]>arr[j-1]){
                        arr[j]=arr[j]+arr[j-1]-(arr[j-1]=arr[j]);
                        
                    }            
                }
            }
            
            这样可以达到排序的效果,但有心你就可以发现,第一轮已经确定最后一个是最大的了,第二轮还进行判断的话就代码多余了,所以我们进行优化,每一轮比较的次数比上一轮少1
            所以语法应该是这样的:
            for(int i=0;i<arr.length;i++){
                for(int j=1;j<arr.length-i;j++){
                    if(arr[j]>arr[j-1]){
                        arr[j]=arr[j]+arr[j-1]-(arr[j-1]=arr[j]);
                        
                    }            
                }
            }
             */
            for(int i=0;i<arr.length;i++){
                for(int j=1;j<arr.length-i;j++){
                    if(arr[j]>arr[j-1]){
                        arr[j]=arr[j]+arr[j-1]-(arr[j-1]=arr[j]);
                        
                    }            
                }
            }
            
            return arr;
        }
        
      package test.sghuzu;

    public class Test8 {//我的插入排序
        public static void main(String[] args){
            int arr[]={12,32,76,23,97,12,32,4};
            for(int j=0;j<arr.length-1;j++){
                for(int i=0;i<arr.length;i++){
                    if(arr[j]>arr[i]){
                        int temp=arr[j];
                        arr[j]=arr[i];
                        arr[i]=temp;
                        break;
                    }
                }
            }
            for(int s:arr){
                System.out.print(s+" ");
            }
            
        }

    }


        
        
        
        /* 一些源码 */
        //非基本类型  
        public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {  
                T[] copy = ((Object)newType == (Object)Object[].class)  
                    ? (T[]) new Object[newLength]  
                    : (T[]) Array.newInstance(newType.getComponentType(), newLength);  
                System.arraycopy(original, 0, copy, 0,  
                                 Math.min(original.length, newLength));  
                return copy;  
            }  
        //基本数据类型  
        public static int[] copyOf(int[] original, int newLength) {  
                int[] copy = new int[newLength];  
                System.arraycopy(original, 0, copy, 0,  
                                 Math.min(original.length, newLength));  
                return copy;  
            }  

    关于数组的声明和赋值:

    public class Test {
        public static void main(String[] args){
            int[] i;
            i=new int[]{1,2,3};
            int[] j;
            i=new int[3];
            /**
             int[] k;
             k={1,2,3};        
             
             先声明,后赋值,本来是没有错的,但是int[] a={1,2,3};是一种简写形式,拆分了会报错。
             Java中{}代表的而是代码块的意思,如果k={1,2,3};相当于将一个{1,2,3}的代码块赋值给数组,所以报错
             */
            
        }
    
    }

    数组的逆序:

    package test.sghuzu;
    
    public class Test3 {
        public static void main(String[] args){
            int[] arr=new int[]{12,33,67,98,34,12,43,65,78};
            /**
             * 逆序
             */
            reversed(arr);
            System.out.println();
            reversed2(arr);
            
        }
        
        public static void reversed(int[] arr){
            for(int a:arr){
                System.out.print(a+"	");
            }
            System.out.println();
            int length=arr.length;
            for(int i=0;i<length/2;i++){//换length/2次
                arr[i]=arr[i]^arr[length-i-1];
                arr[length-1-i]=arr[i]^arr[length-1-i];
                arr[i]=arr[i]^arr[length-1-i];
                
            }
            for(int a:arr){
                System.out.print(a+"	");
            }
        }
        
        public static void reversed2(int[] arr){
            for(int a:arr){
                System.out.print(a+"	");
            }
            System.out.println();
            for(int i=0,j=arr.length-1;i<=j;i++,j--){
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;    
                
                
            }
            for(int a:arr){
                System.out.print(a+"	");
            }
        }
        
    
    }

    寻找数组元素:

    package test.sghuzu;
    
    import java.util.Scanner;
    
    public class Test4 {
        public static void main(String[] args){
            Scanner input=new Scanner(System.in);
            String a[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期天","星期一","星期三"};
            System.out.println("查找指定星期第一次出现的下标,-1表示不存在指定星期!");
            System.out.println("请输入查找的第一次出现的星期:");
            while(true){
                try{
                    String s=input.next();
                    int x=findFirstIndex(a,s);
                    System.out.println(x);
                    break;
                }catch(Exception e){
                    System.out.println("输入异常,请重新输入!");
                }
            }
            
            
        }
        public static int findFirstIndex(String[] arr,String content){
            for(int i=0;i<arr.length;i++){
                if(arr[i]==content||arr[i].equals(content)){
                    return i;
                }
            }
            
            return -1;
            
        }
        public static int findFirstIndex2(String[] arr,String content){
            int index=-1;
            for(int i=0;i<arr.length;i++){
                if(arr[i]==content||arr[i].equals(content)){
                    index=i;
                    break;
                }
            }
            
            return index;
            
        }
    
    }


        
        

    }

  • 相关阅读:
    Day 20 初识面向对象
    Day 16 常用模块
    Day 15 正则表达式 re模块
    D14 模块 导入模块 开发目录规范
    Day 13 迭代器,生成器,内置函数
    Day 12 递归,二分算法,推导式,匿名函数
    Day 11 闭包函数.装饰器
    D10 函数(二) 嵌套,命名空间作用域
    D09 函数(一) 返回值,参数
    Day 07 Day08 字符编码与文件处理
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5521426.html
Copyright © 2020-2023  润新知