演算法之二分查詢 C語言

2021-06-14 13:44:24 字數 892 閱讀 3418

下面是遞迴的方法:

#includeint binary_search(int array,int start_p,int end_p,int value)

return position;

}else if(array[middle] < value)

else if(array[middle] > value)

}else if(start_p == end_p)

return position;

}else

}if(start_p > end_p)

}int main()

;//數字組

int search_number;//要查詢的數字

int position = -1;//查詢到的位置

printf("search number = ");

scanf("%d",&search_number);

position = binary_search(numbers,0,9,search_number);

if(position!= -1)

else

return 0;

}

二分法的最壞時間複雜度為o(lgn)。

用遞迴的方法來分析最壞時間複雜度:執行時間包括:1、乙個子分支的執行時間,子分支的長度為原有分支的1/2;2、分解分支的時間;3、找到資料的時間。其中1的時間為t(n/2)【假設t為執行時間,n為原有分支的長度】;因為分解只是求中間位置,所以時間為o(1);找到資料的時間顯然為o(1)。對於每乙個分支來說,本身的執行時間為o(1)【包含分解、查詢時間】,所以演算法的最壞執行時間與分了幾個分支有關係。對於長度為n,分支個數為lgn+1,所以最壞執行時間為o(lgn+1),簡化後為o(lgn)。

演算法之二分查詢

總時間限制 1000ms 記憶體限制 65536kb 描述在乙個非降序列中,查詢與給定值最接近的元素。輸入第一行包含乙個整數n,為非降序列長度。1 n 100000。第二行包含n個整數,為非降序列各元素。所有元素的大小均在0 1,000,000,000之間。第三行包含乙個整數m,為要詢問的給定值個數...

演算法之二分查詢

二分查詢演算法是運用分治策略的典型例子。給定一組已經排好序的n個元素a n 從這n個元素中找到乙個特定元素x。基本思想 將n 個元素劃分成個數大致相同的兩部分,取中間元素a n 2 與x進行比較 如果x a n 2 即找到x,演算法終止 如果x如果x a n 2 則只在陣列a的右半部分繼續查詢x。c...

演算法之二分查詢

二分查詢針對的是乙個有序的資料集合,查詢思想有點類似分治思想,每次都通過跟區間的中間元素對比,將待查詢的區間縮小為之前的一半,直到找到想要查詢的元素,或是區間被縮小為0。二分查詢的時間複雜度為o l ogn o logn o logn l og nlogn logn 是乙個非常恐怖的數量級,即使n非...