樹心幽徑

« 20191120用PYTHON設計可輸入拆碼來搜尋Boshiamy.cin文字檔的程式readb.py | Main | 20191123用DEV-C++設計可輸入拆碼來搜尋Boshiamy.cin文字檔的程式readbosh.cpp »

20191122用DevC++來編寫循序搜尋法與二分搜尋法程式
2019/11/22,09:07

20191122用dev C++來編寫循序搜尋法,與二分搜尋法程式

(1) 在DEV-C++中按CTRL+N編寫如下程式碼並存為d:\ssearch.cpp (按CTRL+S可存檔)

#include <stdio.h>
int main(void)
{
    int a[] = {4, 5, 8, 1, 3, 2, 7, 3 , 3 };
    int size =sizeof(a)/sizeof(a[0]) ;
    int i,j,t,k;
    printf("\n1:數列長度=%d ,數列註標由0開始,最末數的註標為%d",size,size-1);
    printf("\n2:待搜尋陣列 a[]=");
    for (i = 0; i < size; i++) printf("%3d",a[i]);
    printf("\n3:請輸入待搜尋數字k=");
   
    scanf("%d",&k);
    printf("\n4:搜尋結果如下:");
    int c=0;
    for (i=0;i<size;i++){
        if (a[i]==k) {
            printf("\n找到一筆在 i=%3d a[i]=%3d  c=%d",i,a[i],c);
            c=c+1;
        }
    }
  
    printf("\n5:計找到%d個\n",c);
   
    return (0);
}

 

(2a)按F11編譯並執行,ssearch.cpp執行結果如下:

1:數列長度=9 ,數列註標由0開始,最末數的註標為8
2:待搜尋陣列 a[]=  4  5  8  1  3  2  7  3  3
3:請輸入待搜尋數字k=3

4:搜尋結果如下:
找到一筆在 i=  4 a[i]=  3  c=0
找到一筆在 i=  7 a[i]=  3  c=1
找到一筆在 i=  8 a[i]=  3  c=2
5:計找到3個

(2b)按F11編譯並執行,ssearch.cpp執行結果如下:


1:數列長度=9 ,數列註標由0開始,最末數的註標為8
2:待搜尋陣列 a[]=  4  5  8  1  3  2  7  3  3
3:請輸入待搜尋數字k=44

4:搜尋結果如下:
5:計找到0個

(3) 在DEV-C++中按CTRL+N編寫如下程式碼並存為d:\bsearch.cpp (按CTRL+S可存檔)

#include <stdio.h>
int main(void)
{
    int a[] = {1, 3, 5, 7, 9, 10, 13, 29 , 25 };
    int size =sizeof(a)/sizeof(a[0]) ;
    int i,k;
    printf("\n1:數列長度=%d ,數列註標由0開始,最末數的註標為%d",size,size-1);
    printf("\n2:待搜尋陣列 a[]=");
    for (i = 0; i < size; i++) printf("%3d",a[i]);
    printf("\n3:請輸入待搜尋數字k=");
   
    scanf("%d",&k);
    printf("\n4:搜尋結果如下:");
    int L=0;
    int R=size-1;
    int M=(L+R)/2;
   
   
    while (L<=R){
        printf("\n L=%d a[L]=%d , R=%d  a[R]= %d , M=%d a[M]=%d\n",L,a[L],R,a[R],M,a[M]);
        if (a[M]==k) {
            printf("\n找到一筆在 M=%3d a[M]=%3d ",M,a[M]);
            break;
        }
        else{
            if (k>a[M]) {
                L=M+1;
                printf("\n往大的那一半找");
                }
            else {
                R=M-1;
                printf("\n往小的那一半找");
            }
        }
        M=(L+R)/2;
    }
   
    if (L>=R) printf ("\n沒有找到k\n");
   
    return (0);
}

(4a)按F11編譯並執行,bsearch.cpp執行結果如下:


1:數列長度=9 ,數列註標由0開始,最末數的註標為8
2:待搜尋陣列 a[]=  1  3  5  7  9 10 13 29 25
3:請輸入待搜尋數字k=3

4:搜尋結果如下:
 L=0 a[L]=1 , R=8  a[R]= 25 , M=4 a[M]=9

往小的那一半找
 L=0 a[L]=1 , R=3  a[R]= 7 , M=1 a[M]=3

找到一筆在 M=  1 a[M]=  3

 

(4b)按F11編譯並執行,bsearch.cpp執行結果如下:


1:數列長度=9 ,數列註標由0開始,最末數的註標為8
2:待搜尋陣列 a[]=  1  3  5  7  9 10 13 29 25
3:請輸入待搜尋數字k=2

4:搜尋結果如下:
 L=0 a[L]=1 , R=8  a[R]= 25 , M=4 a[M]=9

往小的那一半找
 L=0 a[L]=1 , R=3  a[R]= 7 , M=1 a[M]=3

往小的那一半找
 L=0 a[L]=1 , R=0  a[R]= 1 , M=0 a[M]=1

往大的那一半找
沒有找到k

 

迴響

 
Accessible and Valid XHTML 1.0 Strict and CSS Powered by LifeType