前几天闲来无事,写了一段 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;
}
* 二分查找法找数字
*
* 雲飛揚
* 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;
}