1. 程式人生 > >二分查找(折半查找)

二分查找(折半查找)

基本 時間 cnblogs 復雜 bsp class 思想 -1 實現

基本思想:

1)二分查找的前提是在有序元素列中進行查詢,所以取元素列中間的元素array[mid]與要查找的元素比較。

2)如果查找的元素比中間位小(or大),則在中間位的左(or右)半段查找。

3)循環步驟1直到元素列頭部與尾部重合

代碼實現:

    //遞歸
    public static int rec(int left, int right, int[] array, int data) {
        if (left <= right) {
            int mid = (left + right) >> 1;                     //
取中間元素 if (array[mid] == data) { return mid; } else if (array[mid] > data) { //檢索元素在mid左 return rec(left, mid - 1, array, data); //從左半段查找 } else if (array[mid] < data) { //檢索元素在mid右 return
rec(mid + 1, right, array, data); //從右半段查找 } } return -1; } //非遞歸(推薦) public static int nonRec(int left, int right, int[] array, int data) { while (left <= right) { int mid = (left + right) >> 1; //取中間元素 if (array[mid] == data) {
return mid; } else if (array[mid] > data) { //檢索元素在mid左 right = mid -1; //從左半段查找 } else if (array[mid] < data) { //檢索元素在mid右 left = mid + 1; //從右半段查找 } } return -1; }

時間復雜度:O(logn)
空間復雜度:遞歸O(logn),非遞歸O(1)

二分查找(折半查找)