前几天闲来无事,写了一段 C 的"二分查找法找数字位置"的算法. /** */ /** * 二分查找法找数字 * * 雲飛揚 * 2008.4.10 */ #include < stdio.h > #include < stdlib.h > #include < time.h > /**/ /*//*/ #define length 5 /**/ /*//*/ struct num ... { int number; /**//* 数字 */ int i; /**//* 编号指针 */} numList[length]; int find( int begin, int end, int number, struct num array[length]); int pos; /**/ /*//*/ int main() ... { int number, index, count, m, n, tmp1, tmp2; srand((unsigned)time(NULL)); printf ("请输入 %d 个数: ", length); for(count = 0;count != length;++count) ...{ scanf("%6d",&numList[count].number); numList[count].i = rand() % 100; } printf ("你输入的 %d 个数为: ", length);/**//*//*/ for (m = 0;m != length;++m) ...{ for(n = m;n != length;++n) ...{ if(numList[m].number > numList[n].number) ...{ tmp1 = numList[m].number; numList[m].number = numList[n].number; numList[n].number = tmp1; tmp2 = numList[m].i; numList[m].i = numList[n].i; numList[n].i = tmp2; } } }/**//*//*/ for(count = 0;count != length;++count) ...{ printf("%6d",numList[count].number); } printf("%6 --- 数字 "); for(count = 0;count != length;++count) ...{ printf("%6d",numList[count].i); } printf ("%8 --- 编号(随机生成) 请输入你要查找的数 "); scanf ("%d",&number); index = find(0, length - 1, number, numList); if(-1 == index)/**//* -1 为查找失败 */ ...{ printf ("没有找到这个数."); } else ...{ printf ("你要查找的数 %d 的编号是 %d. ", number, index); } return 0;} /**/ /*//*/ int find( int begin, int end, int number, struct num array[length]) ... { while(begin <= end) ...{ pos = (begin + end) / 2; if(array[pos].number == number) ...{ return array[pos].i; } else if(number < array[pos].number) ...{ return find(begin, pos - 1, number, array); } else ...{ return find(pos + 1, end, number, array); } } return -1;}