快速排序
代码实现:
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)