c語言折半查找


  折半查找又稱為二分查找,它的前提是線性表中的記錄必須是有序的(通常從小到大有序),線性表必須采用順序存儲.

  折半查找的基本思想是 : 在有序表中,取中間記錄作為比較對象,若給定值與中間記錄的關鍵字相等,則查找成功;若給定值小於中間記錄的關鍵字,則在中間記錄的左半區繼續查找;若給定值大於中間記錄的關鍵字,則在中間記錄的右半區繼續查找.不斷重復上述過程,直到查找成功 或所有查找區域無記錄,查找失敗.

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 //折半查找,又稱為二分查找 ,條件保證要好排序的, 不適合應用在 頻繁的插入操作,因為會打亂順序
 5 int Binary_Search(int *a,int n,int key)
 6 {
 7     int low,high,mid;
 8     low = 0;    //定義最低下標為記錄首位
 9     high = n;   //記錄最高下標為記錄末位
10 
11     while ( low <= high )
12     {
13         mid = (low + high) / 2;
14         if (key < a[mid]) {
15             high = mid - 1;//最高位下標調小 一位
16         } else if(key > a[mid]){
17             low = mid + 1; //最低下標調整到中位下標大一位
18         } else{
19             return mid; //代表就是次位置
20         }
21     }
22     return -1; //沒有找到返回-1
23 }
24 
25 void main()
26 {
27     int a[] = {1,2,3,4,5,6,7,8,9,10};
28 
29     //需求要查找8, 如果用傳統的方式 要查找8次才能得出
30     int index;
31     index = Binary_Search(a, sizeof(a) / sizeof(int),8);
32 
33     if (index == -1)
34         printf("沒有找到");
35     else
36         printf("找到了,index為:%d",index);
37 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM