当先锋百科网

首页 1 2 3 4 5 6 7

从键盘输入一整数(表示数组元素的个数)和一个一维数组,再输入要查找的数。利用折半法查找数组中是否存在该数,并输出查找结果(如果在请输出该数在数组中的位置,如不在请输出不存在)。

程序运行结果示例:
输入:请输入数组的个数:
5
33
66
55
44
88
请输入要查找的数:55
输出:存在排序后数组的第2位

输入提示:“请输入数组的个数:\n”
输入格式:("%d", &n)
输入提示:“请输入要查找的数:”
输入格式:("%d", &n)
输出格式:“存在排序后数组的第%d位\n”
输出格式:“不存在”

#include<stdio.h>
int flag = 0;
int fun(int low, int high, int n, int *num)
{  	  	  	
    int mid;
    mid = (low + high) / 2;
    if (n == num[mid])
    {  	  	  	
        flag = 1;
        return mid;

    }
    else if (n > num[mid])
        fun(mid + 1, high, n, num);
    else
        fun(low, mid - 1, n, num);
}  	 
 	  	
void main()
{  	  	  	
    int n, m, i, j, k;
    int *a;
    printf("请输入数组的个数:\n");
    scanf("%d", &n);
    a = (int *)malloc(sizeof(int) * n);
    for ( k = 0; k < n; k++)
    {  	  	  	
        scanf("%d", &a[k]);
    }
    for ( i = 0; i < n - 1; i++)//从小到大排序
    {  	  	  	
        for ( j = i + 1; j < n; j++)
        {  	  	  	
            int temp;
            if (a[i] > a[j])
            {  	  	  	
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    printf("请输入要查找的数:");
    scanf("%d", &m);
    fun(0, n - 1, m, a);
    if (flag)
    {  	  	  	
        printf("存在排序后数组的第%d位\n", fun(0, n - 1, m, a));
    }
    else
    {  	  	  	
        printf("不存在");
    }
    system("pause");
}