day13System类冒泡排序 二分查找从小到大将数组转成字符串

84 阅读3分钟
 system 的所有的成员都是static修饰的,直接用类名调用即可,不需要对象
        把构造方法private修饰
        常用方法: System.exit(0);//正常结束JVM 
                参数: int status: 0表示正常终止JVM,非0表示异常终止JVM
  System类的静态方法 
      currentTimeMillis(): 获取当前时间的毫秒值  等价于: new Date().getTime()
      //1.获取开始时间对应的毫秒值
        long start = System.currentTimeMillis();
 ### 数组拷贝
  //调用方法,根据题目需求实现数组元素的复制
              System.arraycopy(srcArr,2,destArr,2索引,4个数);
复制到目标数组从指定的位置开始,到最后一个个数 ;
        /*
	java.lang.System类: 用来完成相关系统操作的工具类
    常用方法:
        public static void gc(): 运行垃圾回收器。
        运行垃圾回收器,JVM将从堆内存中清理对象,
        清理对象的同时会调用对象的finalize()方法,建议自定义类覆盖重写finalize()方法
        JVM的垃圾回收器是通过另一个线程开启的
*/
public class Demo05System {
    public static void main(String[] args) {
        for (int i = 0; i < 1000; i++) {
            new Student();
        }
        System.gc();//建议运行垃圾回收器
        System.out.println("main...end...");
    }
}
public class Student {
    @Override
    protected void finalize() throws Throwable {
        System.out.println("对象被回收了...");
    }
}

冒泡排序

 1.原理:     每次都是从第一个元素开始向后两两进行比较,
        只要后面的元素小于前面的元素,就交换这两个元素(从小到大)

    2.总结:
        1.5个数需要排4趟,有n个数需要n-12.每趟排序的次数都比前面一趟少12.总结:
        1.5个数需要排4趟,有n个数需要n-12.每趟排序的次数都比前面一趟少1次
public class Demo05BubbleSort {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {7, 6, 5, 4, 3};
        System.out.println("未排序前: " + Arrays.toString(arr));

        /*
            以下for循环中数字4写死了,可以使用数组长度减1代替
         */
        //arr.length-1: 能否不写 减 1 呢? 可以的,只是多排了一趟而已
        for (int i = 0; i < arr.length - 1; i++) {//外层for循环: 控制排序的趟数
            for (int j = 0; j < arr.length -1 - i; j++) {//内层循环: 控制每趟排序的次数
                //arr.length - 1 - i: 能否不写减i呢? 可以,只是每趟排序的次数多了一次而已
                //arr.length - 1 - i: 能否不写减1呢? 必然不可以,因为会发生索引越界
                //j<arr.length && j + 1<arr.length ==> j<arr.length-1
                if (arr[j] > arr[j + 1]) {
                    //实现数组元素的交换
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }

            }
        }
        System.out.println("升序排序后: " + Arrays.toString(arr));
    }
}        
/*
    java.util.Arrays的特点:
        1.所有的成员都是static修饰的,直接用类名调用即可,不需要对象
        2.把构造方法private修饰
    常用方法:
        public static void sort(int[] a) 对指定的int数组进行升序排列

        public static int binarySearch(int[] a,int key): 
            对数组进行二分查找法,找不到元素返回(-插入点)-1
       二分查找前提:   1.数组必须要保证是有序的  2.数组元素不能重复    
    	public static String toString(int[] a) 将数组转成字符串
        //调用方法按照从小到大的顺序排序
        MyArrays.sort(array); 
        System.out.println("排序后: "+Arrays.toString(array)); 
        System.out.println("二分超找1: "+Arrays.binarySearch(array,1));//0
        System.out.println("二分超找6: "+Arrays.binarySearch(array,6));//4
        System.out.println("二分超找10: "+Arrays.binarySearch(array,10));//6
    }
}