折半查找算法

1. 折半查找算法

    //折半查找算法
    public static int zhebanSearch(int a[],int n, int x){
        int low,high,mid;
        low=0;
        high=n-1;
        while(low<=high){
            mid=(low+high)/2;
            if(a[mid]==x){
                return mid;
            }else if(a[mid]>x){
                high=mid-1;
            }else{
                low=mid+1;
            }
        }
        return -1;
    }

2. 折半查找算法使用示例

package com.cn.find;

import java.util.Scanner;

//折半查找
public class ZhebanSearch {
    public static final int SIZE=10;
    //折半查找算法
    public static int zhebanSearch(int a[],int n, int x){
        int low,high,mid;
        low=0;
        high=n-1;
        while(low<=high){
            mid=(low+high)/2;
            if(a[mid]==x){
                return mid;
            }else if(a[mid]>x){
                high=mid-1;
            }else{
                low=mid+1;
            }
        }
        return -1;
    }
    
    //快速排序的一次划分
    public static int partition(int[] a,int left, int right){
        int temp,l,r,p;
        l=left;
        r=right;
        p=(left+right)/2;
        temp=a[(left+right)/2];    //将中间元作为分界值
        while(l<r){
            while(a[r]>temp&&l<r) r--;
            if(l<r){
                a[p]=a[r];
                p=r;
            }    
            while(a[l]<temp&&l<r) l++;
            if(l<r){
                a[p]=a[l];
                p=l;
            }
        }
        a[p]=temp;
        return p;
    }
    //快速排序算法
    public static void quickSort(int[] a,int left,int right){
        int p;
        if(left<right){
            p=partition(a,left,right);
            quickSort(a,left,p-1);
            quickSort(a,p+1,right);
        }
    }
        
    public static void main(String[] args) {
        int[] a = new int[SIZE];
        //为数组赋值
        for(int i=0;i<a.length;i++){
            a[i] = (int) (100 + Math.random()*100);
        }
        //输出排序前的数组
        System.out.println("排序前的数组为:");
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
        System.out.println();
        //对数组排序
        quickSort(a,0,a.length-1);
        //输出排序后的数组
        System.out.println("排序后的数组为:");
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
        System.out.println();
        while(true){
            System.out.print("请输入要查找到值(-1表示结束):");
            Scanner input = new Scanner(System.in);
            int x = input.nextInt();
            if(x==-1) break;
            int index=zhebanSearch(a,SIZE,x);
            if(index<0){
                System.out.println("没有找到!");
            }else{
                System.out.println("数据:"+x+" 位于数组的第"+(index+1)+"个元素处!");
            }
        }
        
    }

}

 

posted @ 2015-05-07 17:07  ~风轻云淡~  阅读(1288)  评论(0编辑  收藏  举报