用C语言写一段程序,高手快来哦!

在主函数中定义一个整型函数,存放用scanf()输入的15个整数。然后分别调用排序函数和查找函数,并输出排序结果和查找结果。编写如下两个功能函数:1.排序函数sort():用选择法(或冒泡法)对15个整数排序(整数用scanf()输入)
2.查找函数search():输入一个数,用折半查找法找出该数是数组的第几个元素的值。如果该数不在数组中,则输出“无此数”

不胜感激!!! 就这么多分了,都拿出来了~~~ 快点哦,要19号之前!

#include <stdio.h>
#define RANGE 15
int get_min_id(int * x, int range)
{
int i = 0, j = 0, m = 99999999L;
for(i = 0; i < range; i++) {
if (x[i] < m) {
m = x[i];
j = i;
}
}
return j;
}

void sort(int x[RANGE])
{
int i = 0, j = 0, r = 0, t = 0; int * y = 0;
for(i = 0; i < RANGE; i++) {
y = (int *)x + i + 1;
r = RANGE - i;
j = get_min_id(y, r) + i + 1;
if (x[j] < x[i]) {
t = x[i];
x[i] = x[j];
x[j] = t;
}
}
}

int search(int x[RANGE], int y)
{
int nStart=0,nEnd=RANGE-1,nMiddle,nFound=0;

while(nStart<=nEnd)
{
nMiddle=(nStart+nEnd)/2;
if(x[nMiddle]==y)
return nMiddle;
else
if(x[nMiddle]>y)
nEnd=nMiddle-1;
else
nStart=nMiddle+1;
}
return -1;
}

int main(void)
{
int x[RANGE], y = 0, i = 0;
printf("请输入%d个整数:", RANGE);
for(i = 0; i< RANGE; i++) scanf("%d", x + i);
sort(x);
printf("排序后为:\n");
for(i = 0; i < RANGE; i++) printf("%d\t", x[i]);
printf("\n请输入要搜索的整数:");
scanf("%d", &y);
i = search(x, y);
if (i < 0)
printf("无此数\n");
else
printf("这是数组中的第%d个元素\n", i+1);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-17
//---------------------------------------------------------------------------

#include <stdio.h>

void sort(int *a,int n)
{
int i,j,k,t;
for (i = 0; i<n-1; i++) {
k=i;
for (j=i+1; j<n; j++)
if (a[k]>a[j])
k=j;

if (k!=i) {
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
}
int search(int *a,int n,int s)
{
int b=0,e=n-1;
while (b<=e)
if (s==a[(b+e)/2])
return (b+e)/2;
else if(s<a[(b+e)/2])
e=(b+e)/2-1;
else b=(b+e)/2+1;
return -1;
}
int main(void)
{
int a[15],i;
for (i = 0; i<15; i++) scanf("%d",&a[i]);
sort(a,15);
printf("请输入一个要查找的整数:");
scanf("%d",&i);
i=search(a,15,i);
printf(i<0?"无此数":"该数字是数组中的第%d个数字",i+1);
return 0;
}
//---------------------------------------------------------------------------