// 题目是数组15个数排序,然后输入一个数看是否在里面,并且用折半法找出该数下标
#include<stdio.h>
#define N 15
int Date(int a[],int n);
int Print(int a[],int n);
int Search(int a[],int b,int c);
int main()
{
int n,x,b,c;
int a[N]={1,56,24,89,63,44,50,87,99,64,25,64,86,45,82};
Date(a,n); //排序
printf("成绩顺序是:\n");
Print(a,n); //打印排序结果
Search(a,b,c);
return 0;
}
int Date(int a[],int n)
{
int i,j,k,temp1;
for(i=0;i<N-1;i++)
{
k=i;
for(j=i+1;j<N;j++)
{
if(a[j]>a[k])
{
k=j;
}
}
if(k!=i)
{
temp1=a[k];a[k]=a[i];a[i]=temp1;
}
}
}
int Print(int a[],int n)
{
int i;
for(i=0;i<N;i++)
{
printf("%101d%4d\n",a[i]);
}
}
int Search(int a[],int b,int c)
{
int low=0,high=N-1,mid,x;
printf("输入一个数:");
scanf("%d",&x);
while(low<=high)
{
mid=(high+low)/2;
if(x>a[mid])
low=mid+1;
else if(x<a[mid])
high=mid-1;
else
return mid;
}
return -1;
}
供参考:
#include <stdio.h>
#define N 15
void Date(int a[], int n); //修改
void Print(int a[], int n); //修改
int Search(int a[], int n); //修改
int main()
{
int n, x; //修改
int a[] = { 1,56,24,89,63,44,50,87,99,64,25,65,86,45,82 };//修改
n = sizeof(a) / sizeof(a[0]); //修改
Date(a, n); //排序
printf("成绩顺序是:\n");
Print(a, n); //打印排序结果
x = Search(a, n); //修改
if (x >= 0)
printf("a[%d]=%d", x, a[x]);
else
printf("Not Found");
return 0;
}
void Date(int a[], int n)
{
int i, j, k, temp1;
for (i = 0; i < n - 1; i++) //修改
{
k = i;
for (j = i + 1; j < n; j++) //修改
{
if (a[j] < a[k]) //修改
{
k = j;
}
}
if (k != i)
{
temp1 = a[k]; a[k] = a[i]; a[i] = temp1;
}
}
}
void Print(int a[], int n)
{
int i;
for (i = 0; i < n; i++) //修改
{
printf("%4d", a[i]); //修改
}
printf("\n"); //修改
}
int Search(int a[], int n) //修改
{
int low = 0, high = n - 1, mid, x; //修改
printf("输入一个数:");
scanf("%d", &x);
while (low <= high)
{
mid = (high + low) / 2;
if (x > a[mid])
low = mid + 1;
else if (x < a[mid])
high = mid - 1;
else
return mid;
}
return -1;
}