谢谢cacker提供的函数!
修改后如下:
第一种
#include <stdio.h>
int main(int argc, char *argv[])
{
    int HalfSearch(int array[], int nLength, int value);
    int i,j,t,n,x,w,a[100000];
    printf("请输入n的值:\n");
    scanf("%d",&n);
    printf("请输入n个正整数:\n");
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    printf("先对数组a进行排序:\n");
    for(j=0;j<n-1;j++)
        for(i=0;i<n-1-j;i++)
            if(a[i]>a[i+1])
            {
                t=a[i];
                a[i]=a[i+1];
                a[i+1]=t;
            }
    printf("%d个数由小到大排序为:\n",n);
    for(i=0;i<n;i++)
    printf("%d,",a[i]);
    printf("\n");
    printf("请输入要查找的数字:\n"); 
    scanf("%d",&x);
    w=HalfSearch(a, n, x);
    if(w>=0)
    {
        printf("%d的位置是第%d个。",x,w);
    }
    else
    {
        printf("错误!"); 
    }
    return 0;
}
//功能: 折半查找法   注:必须先排序 并且是升序
//参数: arrary 目的数组, nLength数组长度, value 要查找的数据
//返回: 如果有这个数组,就返回在数组里的位置,如果没有返回-1
int HalfSearch(int array[], int nLength, int value)
{
    int nIndex =-1;                    
    int mid = 0;                       //中间位置
    int left = 0;
    int right = nLength - 1;
   
    while(left <= right)
    {
        mid = (left + right)/2 ;      
        if ( value == array[mid])
        {
            nIndex = mid+1 ;
            break ;
        }
        else if (value < array[mid])
            right = mid - 1;
        else
            left = mid + 1;
    }
   
   
    return nIndex;
}
第二种
#include <stdio.h>
int main(int argc, char *argv[])
{
    int HalfSearch(int array[], int nLength, int value);
    int i,j,t,n,x,w,a[100000];
    printf("请输入n的值:\n");
    scanf("%d",&n);
    printf("请输入n个正整数:\n");
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    printf("先对数组a进行排序:\n");
    for(j=0;j<n-1;j++)
        for(i=0;i<n-1-j;i++)
            if(a[i]>a[i+1])
            {
                t=a[i];
                a[i]=a[i+1];
                a[i+1]=t;
            }
    printf("%d个数由小到大排序为:\n",n);
    for(i=0;i<n;i++)
    printf("%d,",a[i]);
    printf("\n");
    printf("请输入要查找的数字:\n"); 
    scanf("%d",&x);
    int l=0,r=n-1;
    while(l<=r)
    {
        i=(l+r)/2;
        if(x==a[i])
        {
            w=i+1;
            break;
        }
        else
        if(x<a[i])
        {
            r=i-1;
        }
        else  l=i+1;
    }
    if(w>=0)
    {
        printf("%d的位置是第%d个。",x,w);
    }
    else
    {
        printf("错误!"); 
    }
    return 0;