Java基本语法3-快速排序、Arrays工具类、数组常见异常

快速排序

在这里插入图片描述
在这里插入图片描述
代码实现:

    public static void swap(int[] data,int i,int j){
        int temp = data[i];
        data[i] = data[j];
        data[j] = temp;
    }
    public static void subSort(int[] data,int start,int end){
        if(start < end){
            int base = data[start];
            int low = start;
            int high = end + 1;
            while(true){
                while (low< end && data[++low]-base<=0); //先看左边,low比base小的话就递加
                while (high > start && data[--high] - base>=0); //再看右边,high比base大的话就递减
                if (low<high){
                    swap(data,low,high); //符合条件就交换
                }
                else {
                    break; //当low大于high时跳出循环
                }

            }
            swap(data,start,high);
            subSort(data, start, high-1); //分成两部分递归调用
            subSort(data, high+1, end);
        }
    }
    public static void quickSort(int[] data){
        subSort(data,0,data.length-1);
    }
    public static void main(String[] args){
        int[] data = {9,-16,30,23,-30,49,25,21,30};
        System.out.println("之前\n"+java.util.Arrays.toString(data));
        quickSort(data);
        System.out.println("之后\n"+java.util.Arrays.toString(data));
    }

数组中常见算法性能对比

在这里插入图片描述

Arrays工具类的使用

int arr1[] = new int[] { 21, 43, 542, 432, 4, 2, 5, 1 };
int arr2[] = new int[] { 32, 43, 4, 1, 4, 76, 54, 68, 4 };

// 1.Arrays.equals(arr1, arr2):判断数组是否相等
System.out.println(Arrays.equals(arr1, arr2));
// 2.Arrays.toString(arr1):输出数组信息
System.out.println(Arrays.toString(arr1));

// 3.Arrays.fill(arr1, 2):将指定值填充到数组中
Arrays.fill(arr1, 2);
System.out.println(Arrays.toString(arr1));
// 4.Arrays.sort(arr2):对数组进行排序
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
// 5.Arrays.binarySearch(arr2, 1):堆排序好的数组用二分法检索指定值
int index = Arrays.binarySearch(arr2, 1);
System.out.println(index);


运行结果:
false
[21, 43, 542, 432, 4, 2, 5, 1]
[2, 2, 2, 2, 2, 2, 2, 2]
[1, 4, 4, 4, 32, 43, 54, 68, 76]
0

数组中常见的异常

1.数组角标越界异常:

int[] arr = new int[]{1,2,3,4,5};

for(int i = 0;i <= arr.length;i++){
    System.out.println(arr[i]);
}

System.out.println(arr[-2]);

System.out.println("hello");


结果:

1
2
3
4
5
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
	at helloworld.main(helloworld.java:194)

2.空指针异常:

//情况一:
int[] arr1 = new int[]{1,2,3};
arr1 = null;
System.out.println(arr1[0]);

//情况二:
int[][] arr2 = new int[4][];
System.out.println(arr2[0][0]);

//情况:
String[] arr3 = new String[]{"AA","BB","CC"};
arr3[0] = null;
System.out.println(arr3[0].toString());

结果

Exception in thread "main" java.lang.NullPointerException: Cannot load from int array because "arr1" is null
	at helloworld.main(helloworld.java:194)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值