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
|