1.二分查找法
前提条件:二分查找的前提条件是数组里的元素是有序排列的
例如:int[] arr= new int{1,2,3,4,5,6,7,8}
1.定义需要查找到数number,
2.定义索引最小值和最大值,
3.循环查找,条件min<=max;
4.mid=(min+max)>>1;
5.如果mid指向的元素大于number则,max=mid-1;
6.如果mid指向的元素小于number则min=mid+1;
7.如果mid指向的元素等于number子返回索引
8.如果以上条件都不满足则返回-1;
public class Test02 {
public static void main(String[] args) {
int[] arr=new int[]{1,2,3,4,5,6,7,8,9,10};
int number=11;
System.out.println(numberSesrch(arr,11));
}
private static int numberSesrch(int[] arr,int number) {
//定义最大索引和最小索引
int min=0;
int max=arr.length-1;
while(min<=max){
int mid=(min+max)>>1;
//如果number大于mid指向的值
if (number>arr[mid]){
min=mid+1;
}else if (number<arr[mid]){
max=mid-1;
}else{
return mid;
}
}
return -1;
}
}
2.冒泡排序
3.快排
public class Test03 {
public static void main(String[] args) {
int[] arr={8,9,10,1,5,6,4,3,2,7};
quitesort(arr,0,arr.length-10);
System.out.println(arr[i]);
}
private static void quitesort(int[] arr, int left, int right) {
if (left>right){
return;
}
int left0=left;
int right0=right;
//循环
while(left!=right){
//循环在右边找出比基准数小的
while(arr[left0]>=arr[right]&&right>left){
right--;
}
//循环在左边找比基准数大的
while(arr[left0]<=arr[left]&&right>left){
left++;
}
int empt=arr[right];
arr[right]=arr[left];
arr[left]=empt;
}
//基准数arr[left0]归位
int empt=arr[left];
arr[left]=arr[left0];
arr[left0]=empt;
//以基准数为点左右分割数组继续调用方法(递归)
quitesort(arr,left0,left-1);
quitesort(arr,left+1,right0);
}
arrays类
public class Text01 {
public static void main(String[] args) {
int[] arr=new int[]{5,6,4,2,3,1,9,8,7};
//将数组排序
Arrays.sort(arr);
//利用binarySearch()方法找到所在的元素索引,注意这个方法利用的二分查找法
int i = Arrays.binarySearch(arr, 5);
System.out.println(i);
//将数组转换成字符串输出
System.out.println(Arrays.toString(arr));
**}
}