維基上的**:
int binary_search(int a, int key, int imin, int imax)
// key was not found
return key_not_found;
}
評估下面兩個演算法:
int binary_search()
; size = sizeof(words) / sizeof(words[0]);
printf("第乙個演算法 sizeof = %d\n", size);
int head = 0;
int tail = size;
int cursor = (head + tail) / 2;
int result = 999;
int count = 0;
printf("keys= \"%s\"\n", keys);
printf("words[i] = \n");
for (int i = 0; i < size; ++i) printf("[%d]=\"%s\" ", i, words[i]);
doelse if (result < 0)
else
cursor = (head + tail) / 2;
}while((head < cursor) && (cursor <= tail)); //((head <= cursor) && (cursor < tail))
printf("\n------------------\ncursor = %d head = %d , tail = %d , \n", cursor, head, tail);
printf("words[%d] = \"%s\" , result = %d \n\n", cursor, words[cursor], result);
printf("********************\n");
int left = 0, right = size - 1, middle = 0; //, result = 0;
count = 0;
printf("第二個演算法 sizeof = %d\n", size);
printf("keys= \"%s\"\n", keys);
printf("words[i] = \n");
for (int i = 0; i < size; ++i) printf("[%d]=\"%s\" ", i, words[i]);
printf("\nmiddle = %d, left = %d , right = %d , \n", middle, left, right);
while (left <= right)
else if (result < 0) right = middle - 1;
else break;
} printf("---------------------\nmiddle = %d, left = %d , right = %d , \n", middle, left, right);
printf("words[%d] = \"%s\" , result = %d \n ", middle , words[middle], result);
return cursor;
}
程式結果:
第乙個演算法 sizeof = 12
keys= "11"
words[i] =
[0]="1" [1]="2" [2]="21" [3]="22" [4]="222" [5]="3" [6]="5" [7]="66" [8]="90" [9]="900" [10]="91" [11]="929"
count = 0 cursor = 6 head = 0 , tail = 12 ,
words[6] = "5" , result = -1
count = 1 cursor = 3 head = 0 , tail = 6 ,
words[3] = "22" , result = -1
count = 2 cursor = 1 head = 0 , tail = 3 ,
words[1] = "2" , result = -1
------------------
cursor = 0 head = 0 , tail = 1 ,
words[0] = "1" , result = -1
********************
第二個演算法 sizeof = 12
keys= "11"
words[i] =
[0]="1" [1]="2" [2]="21" [3]="22" [4]="222" [5]="3" [6]="5" [7]="66" [8]="90" [9
]="900" [10]="91" [11]="929"
middle = 0, left = 0 , right = 11 ,
count = 0 middle = 5, left = 0 , right = 11 ,
words[5] = "3" , result = -1
count = 1 middle = 2, left = 0 , right = 4 ,
words[2] = "21" , result = -1
count = 2 middle = 0, left = 0 , right = 1 ,
words[0] = "1" , result = 1
count = 3 middle = 1, left = 1 , right = 1 ,
words[1] = "2" , result = -1
---------------------
middle = 1, left = 1 , right = 0 ,
words[1] = "2" , result = -1
請按任意鍵繼續. . .
當搜尋失敗的時候,「中間點」停留在**呢?能否停留在「最近似」的乙個位置?忙於工作,有機會再研究。
查詢演算法 折半查詢演算法
折半查詢演算法 binary search param a 乙個有序的集合 本次為由小到大 param x 需要查詢的值 ps 首先使用折半演算法的時候 集合必須是有序的 eg a 1,3,5,7,9 x 3 a mid low height 1,3,5,7,9 2 0 1 1,3 0 1 1 3 ...
查詢演算法 折半查詢
本小節知識點 1.掌握 基本思路 2.掌握 實現步驟 3.了解 練習 1.基本思路 在有序表中,取中間元素作為比較物件,若給定值與中間元素的要查詢的數相等,則查詢成功 若給定值小於中間元素的要查詢的數,則在中間元素的左半區繼續查詢 若給定值大於中間元素的要查詢的數,則在中間元素的右半區繼續查詢。不斷...
折半查詢演算法
折半查詢法 從表列中查乙個數最簡單的方法是從第1個數開始順序查詢,將要找的數與表列中的 數一一比較,直到找到為止 如果表列中無此數,則應找到最後乙個數,然後判定 找不到 但這種 順序查詢法 效率較低。如果表列中有1000個數,且要找的數恰恰是第1000個數,則要進行1000次比較才得到結果。平均比較...