二分法排序:
# include <stdio.h>
int main ()
{
int a[]={9,5,1,4,7,6,8}; //可用随机生成数组。
int i,j,k,t;
int low,up,mid;
for (i=k=1;i<7;i++)
{
low=0;
up=k-1;
while (low<=up) // 上下限相遇时则找到插入位置。
{
mid=(up+low)/2;
if (a[mid]>=a[i]) // 数比中间值小,范围变为low到mid-1.
{
up=mid-1;
}
else
{
low=mid+1;
}
}
if (up<i || a[low]!=a[i])
{
t=a[i]; // 保存a[i]的值
for (j=k-1;j>=low;j--)
{
a[j+1]=a[j]; // 下限到k-1之间的数依次后移一位。
}
a[low]=t; //替换成被覆盖掉的a[i]的值
k++;
}
}
折半查找:
#include <stdio.h>
main( )
{int up=9, low=0, mid, found=0, find;
int a[10]={1, 5, 6, 9, 11, 17, 25, 34, 38, 41};
scanf(〞%d 〞, &find);
printf(〞\n 〞);
while (up>=low && !fount)
{mid=(up+low)/2;
if(a[mid]==find)
{found=1; break;}
else if(a[mid]>find)
up=mid-1;
else low=mid+1;
}
if(found) printf(〞found number is %dth 〞mid);
else printf(〞no found 〞);