好久没发贴了,发个二分法查找,插入排序的程序,高手看了请指点不足,兄弟先谢谢了!!!
/*程序目的:用二分法来查找一个数据在给定数组中出现的位置
*/
#include <stdio.h>
#define MAX 10
void sort(int *a);
void print_arr(int *a, int len);
int search(int *a, int n);
int main(void)
{
int a[10], i, n;
printf("Please input 10 numbers:\n");
for (i=0; i<MAX; i++)
{
if (scanf("%d", &a[i]) == 0)
{
printf("Your input is not a number!");
exit(1);
}
}
sort(a);
printf("Please input the number you want to search:\n");
scanf("%d", &n);
if (search(a, n) == 1)
{
printf("The searched number is in the list!!\n");
}
else
{
printf("The searched number is not in the list!!\n");
}
return 0;
}
/*
@功能:将数组a按升序进行排序(用插入排序法)。
@输入:整型数组a.
@返回:无。
*/
void sort(int a[])
{
int j, k, m;
/*从第2个数字开始,依次读取数字*/
for (j=1; j<MAX; j++)
{
m=j-1;
k=a[j];
/*将大于新数字的数字全部后移1位*/
while (a[m]>k&&m>=0)
{
a[m+1]=a[m];
m--;
}
a[m+1]=k;
}
}
/*
@功能:将数组a打印出来。
@输入:整型数组a,长度len.
@返回:无。
*/
void print_arr(int *a, int len)
{
int i;
for (i=0; i<len; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
/*
@功能:查找n是否存在于数组a中。
@输入:整型数组a,整数n.
@返回:存在,返回1;不存在,返回0。
*/
int search(int *a, int n)
{
int i, start=0, end=MAX-1, middle=0 ,k=0;
/*因为这里数组是经过排序的,所以小于最小的和大于最大的输入一定不在该数组中,
直接返回,避免浪费时间。*/
if (n<a[start]||n>a[end])
{
return 0;
}
/*利用3个下标来完成二分法的查找*/
while (start!=end)
{
middle=(start+end)/2;
/*根据不同的情况,重置start,end的位置*/
if (a[middle] == n)
{
return 1;
}
if (a[middle]>n)
{
end=middle;
}
if (a[middle]<n)
{
start=middle;
}
}
return 0;
}
这个就是我的程序.高手看了要是发现有什么不足,请不吝赐教.兄弟我先谢谢了!!