Arrays类,循环二分法和排序
Arrays类
操作数组的一个工具类,封装了很多常用来操作数组的方法。
toString()方法
把数组中的内容用字符串的形式返回。
public class ArraysDemo {
public static void main(String[] args) {
int[] arr = new int[]{2,3,1,6,5,8};
//toString() 把数组中的内容用字符串的形式返回,
System.out.println(arr);//[I@15db9742 (对象,后面的是当前对象所在内存的地址)
System.out.println(Arrays.toString(arr));//[2, 3, 1, 6, 5, 8]
}
}
equals()方法
比较两个数组的内容是否相等。
public class ArraysDemo {
public static void main(String[] args) {
int[] arr = new int[]{2,3,1,6,5,8};
int[] arr1 = new int[]{2,3,1,6,5,8};
//equals() 比较两个数组的内容是否相等
System.out.println(arr==arr1);//false (比较的是地址,自然不相同)
System.out.println(Arrays.equals(arr, arr1));//true,这里比较的是内容
}
}
sort排序
public class ArraysDemo {
public static void main(String[] args) {
int[] arr1 = new int[]{2,3,1,6,5,8};
/*
* static void sort(int[] a)
* 对指定的数组进行排序(数字的升序)
*/
Arrays.sort(arr1);//排序了
System.out.println(Arrays.toString(arr1));
}
}
二分查找法
public class ArraysDemo {
public static void main(String[] args) {
int[] arr1 = new int[]{2,3,1,6,5,8};
int[] arr5 = new int[]{2,3,1,6,5,8};
/*
* 二分查找法
* binarySearch(int[] arr,int value)
* 使用二分查找法,首先需要保证数组是有序的。
*/
//如果值为负数,代表没有找到这个指定数。返回的数字是-(应该在数组中的索引+1)
System.out.println(Arrays.binarySearch(arr1, 3));
System.out.println(Arrays.binarySearch(arr5, 9));
}
}
利用循环实现二分查找
二分法实现的前提是数组已经有序。
import java.util.Scanner;
public class erfen {
public static void main(String[] args) {
System.out.println("请输入要找的数");
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
int[] a={5,7,9,11,13,15,17,19,21};
int s=0;
int e=a.length-1;
boolean flag=false;
while (s<=e){
int mid=(s+e)/2;
if(a[mid]==num){
System.out.println("在下标为"+mid+"处找到了"+num);
flag=true;
break;
}else if(a[mid]>num){
e=mid-1;
}else {
s=mid+1;
}
}if(flag==false){
System.out.println("没有这个数");
}
}
}
选择排序与插入排序
选择排序
第一种方法
public class xuanze {
public static void main(String[] args) {
int []a={2,6,3,49,1,20,30,11,9};
for(int i=0;i<a.length-1;i++){
int max=a[i];
int t=i;
for(int j=i+1;j<a.length;j++){
if(max<a[j]){
max=a[j];
t=j;
}
}a[t]=a[i];
a[i]=max;
}
System.out.println(Arrays.toString(a));
}
}
第二种方法
public class xuanze1 {
public static void main(String[] args) {
int[] a={9,10,3,5,1,8,6,11,22};
for(int i=0;i<a.length-1;i++){
int min=i;
for(int j=i+1;j<a.length;j++){
if(a[j]<a[min]){
min=j;
}
}
// if(min!=i){
int tmp=a[i];
a[i]=a[min];
a[min]=tmp;
// }
}
System.out.println(Arrays.toString(a));
}
}
插入排序
public class charu {
public static void main(String[] args) {
int[] a={2,6,12,3,1,5,10,21,16};
int tmp;
for(int i=0;i<a.length-1;i++){
for(int j=i+1;j>0;j--){
if(a[j]>a[j-1]){
tmp=a[j-1];
a[j-1]=a[j];
a[j]=tmp;
}else {
break;
}
}
}
System.out.println(Arrays.toString(a));
}
}