折半查找
给定一组数据,先进行快速排序,再进行折半查找
import java.util.*;
/**
* @version 1.0
* @author zhouxiaowu
*
*/
public class BinSearch {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("please input dataset:");
String str = sc.nextLine();
String[] s = str.split("\\s+");
System.out.println("please input search value:");
int value = sc.nextInt();
int[] nums = new int[s.length];
for(int i=0;i<nums.length;i++){
nums[i]=Integer.parseInt(s[i]);
}
Qsort(nums,0,nums.length-1);
System.out.println("sorted dataset:");
for(int i:nums)
System.out.print(i+" ");
System.out.print("\n");
int result = binSearch(nums,value);
System.out.println(value+":"+result);
}
public static void Qsort(int[] num,int low,int high){
if(low<high){
int part = partition(num,low,high);
if(low<part-1) Qsort(num,low,part-1);
if(high>part+1) Qsort(num,part+1,high);
}
}
public static int partition(int[] num,int p,int q){
int low =p,high=q;
int temp =num[low];
while(low<high){
while(low<high&&temp<=num[high])
high--;
if(low<high)
num[low++]=num[high];
while(low<high&&temp>=num[low])
low++;
if(low<high)
num[high--]=num[low];
}
num[low]=temp;
return low;
}
public static int binSearch(int[] num,int value){
int low = 0;
int high = num.length-1;
int mid;
while(low<=high){
mid=(low+high)/2;
if(num[mid]==value)
return mid;
else if(num[mid]>value)
high=mid-1;
else
low = mid+1;
}
return -1;
}
}
测试结果:
Input:please input dataset:
15 7 9 2 12 8 1
please input search value:
9
output:sorted dataset:
1 2 7 8 9 12 15
9:4