查询算法(一) 顺序查询与折半查询

顺序查找

顺序查找(Order Search)比较简单,就是for循环遍历,适用于少量的、无规则的数据查找。

代码省略......

 

折半查找

折半查找(Binary Search)又称二分查找,其要求数据序列是有序线性的。对于没有顺序的数据序列需要先进行排序在进行查找。折半查找先找到中间值,中间值与要进行比较的值进行比较,比中间值小就向数据序列左进行查找;比中间值大就与之相反。

 

代码如下:

快速排序+折半查找

快速排序算法代码如下:

/**
 * 快速排序
 * @author Red Ants(guangboyuan.cn) 
 *         微信公众号:程序员之路 堆排序
 *
 */
public class QuickSort {
    public static void quickSort(int[] arr ,int left,int right) {
        System.out.println(String.format("left下标: %d,right下标: %d", left,right));
        //存储数组中的中间值作为快速排序的分界值
        int f=arr[(left+right)/2]; 
        
        System.out.println(String.format("分界值下标(left+right)/2: %d 分界值arr[(left+right)/2]: %d",(left+right)/2, f));
        //存储数组的开始和结束为止的下标
        int ltemp=left;
        int rtemp=right;
        int t;
        while (ltemp < rtemp) {
            System.out.println(String.format("ltemp下标:%d  arr[ltemp]: %d",ltemp, arr[ltemp]));
            while(arr[ltemp] < f){
                ++ltemp;
                System.out.println(String.format("ltemp下标:%d  arr[ltemp]: %d",ltemp, arr[ltemp]));
            }
            System.out.println(String.format("rtemp下标:%d  arr[rtemp]: %d",rtemp, arr[rtemp]));
            while(arr[rtemp] > f){
                --rtemp;
                System.out.println(String.format("rtemp下标:%d  arr[rtemp]: %d",rtemp, arr[rtemp]));
            }
            if(ltemp <= rtemp){
                t = arr[ltemp];
                arr[ltemp] = arr[rtemp];
                arr[rtemp] = t;
                --rtemp;
                ++ltemp;
            }
            System.out.println(Arrays.toString(arr));
            if(ltemp == rtemp){
                ltemp++;
            }
            if(left < rtemp){
                quickSort(arr, left, ltemp-1);
            }
            if(ltemp < right){
                quickSort(arr, rtemp+1, right);
            }
        }
    }
    
    public static void main(String[] args) {
        int[] arr = new int[]{20,11,3,7,1,9,22,33,12,11};
        System.out.println(Arrays.toString(arr));
        quickSort(arr, 0, arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
}

 

折半查找如下:

/**
 * @author Red Ants
 *         微信公众号:程序员之路
 * 折半查找
 */
public class BinarySearch {
    public static int binarySearch(int[] arr,int x) {
        int low = 0;
        int high = arr.length-1;
        
        while (low <= high) {
            int mid = (low+high)/2;
            if(arr[mid] == x){
                return mid;
            }else if(arr[mid] > x){
                high = mid-1;
            }else if(arr[mid] < x){
                low = mid+1;
            }
        }
        return -1;
    }
    
    public static void main(String[] args) {
        int[] arr = new int[]{3,2,9,1,10,11,20,18};
        QuickSort.quickSort(arr, 0, arr.length-1);
        System.out.println(String.format("数值  %d 所在数组 %s 中的位置是%d", 11,Arrays.toString(arr),binarySearch(arr, 11)));
    }
}

 

posted @ 2017-03-31 11:06  RedAnts  阅读(742)  评论(0编辑  收藏  举报