其思路很像,均为分冶法,用递归实现。
其时间复杂度最优均为O(logn)
二分:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int x=scanner.nextInt();
int[] arr={0,1,2,3};//需要提前排好序,从小到大
int l=0,r=arr.length-1;
boolean flag=false;
while(l<=r){
int middle=(l+r)/2;
if (x==arr[middle]) {
System.out.println(middle);
flag=true;
break;
}
else if(x<arr[middle]) r=middle-1;
else l=middle+1;
}
if(!flag) System.out.println("找不到");
}
}
快排:
public static void quickSort(int[] arr, int l, int r){
if (l>=r) return ;
int pos=l;
int i=l,j=r;
//arr[pos]=arr[l];
while(i<j){
while(arr[pos]<arr[j]&&i<j) j--;
while(arr[pos]>arr[i]&&i<j) i++;
if (i<j) {
int tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}//若i>=j不用置换
}
arr[pos]=arr[i];
arr[i]=arr[l];
quickSort(arr,l,i-1);
quickSort(arr,i+1,r);
}
public static void main(String[] args) {
int[] arr={0,10,30,20,40,60,80,90,50,70};
quickSort(arr,0,arr.length-1);
for (int k=0;k<arr.length;k++){
System.out.print(arr[k]+" ");
}
}
}