程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 基礎算法之二分法查找,算法二分法查找

基礎算法之二分法查找,算法二分法查找

編輯:關於C語言

基礎算法之二分法查找,算法二分法查找


二分查找算法C

二分查找也屬於順序表查找范圍,二分查找也稱為折半查找。二分查找(有序)的時間復雜度為O(LogN)。

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

從二分查找的定義我們可以看出,使用二分查找有兩個前提條件:

1,待查找的列表必須有序。

2,必須使用線性表的順序存儲結構來存儲數據。

 

二分法查找在針對大量有序排列的情況下發揮出很優越的效率,這裡以最具規律性的數組為例,代碼如下:

 1 #include <stdio.h>
 2 //二分查找
 3 int binary_search(const int c[], int l,int h,int key);
 4 void Display(int x);
 5 int a[]={15,8,100,46,22,56,34,79,98,66,200,11,300};
 6 int z=sizeof(a)/sizeof(int);
 7 int b[sizeof(a)/sizeof(int)];
 8 int t;
 9 int i;
10 int main(int argc, const char * argv[]) {
11     
12     for (i=0; i<(sizeof(a)/sizeof(int)); i++) {
13         b[i]=a[i];
14     }
15     //printf("%ld\n",sizeof(a)/sizeof(int));
16     
17     for(i=0;i<(sizeof(a)/sizeof(int));i++)
18     {
19         for(int j=i;j<(sizeof(a)/sizeof(int));j++)
20         {
21             if(b[i]>b[j]) {
22                 t=b[i];
23                 b[i]=b[j];
24                 b[j]=t;
25             }
26         }
27     }
28     printf("\n");
29     int m=0;
30     int n=z;
31     int w;
32     int x;
33     printf("請輸入要查找的整數:");
34     scanf("%d",&x);
35     w=x;
36    // getchar();
37     int g;
38     g=binary_search(b, m, n, w);
39     Display(g);
40     return 0;
41 }
42 
43 int binary_search(const int c[], int l,int h, int key){
44     while(l<= h)
45     {
46         int f = (l + h)/2;
47         if(c[f]== key)
48             return c[f] ;
49         //在左半邊
50         else if(c[f] > key)
51             h = f - 1;
52         //在右半邊
53         else
54             l = f + 1;
55     }
56     //沒找到
57     return -1;
58 }
59 
60 //打印結果
61 void Display(int x){
62     if (x!=-1) {
63         for(i=0;i<z;i++){
64             if (x==a[i]) {
65                 printf("所在位置:%d\n",i);
66             }
67         }
68     }
69     
70     else{
71         printf("對不起,沒有找到該數\n");
72     }
73 }

運行結果1:

請輸入要查找的整數:200
所在位置:10
Program ended with exit code: 0

運行結果2:

請輸入要查找的整數:500
對不起,沒有找到該數
Program ended with exit code: 0

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved