求下面这个命题的C算法,源程序最好(不是C++)

来源:百度知道 编辑:UC知道 时间:2024/06/28 13:19:21
求下面这个命题的C算法,源程序最好(不是C++)。
本人不是很理解如何求在冒泡法排序之后求得的数在原数列中的位置,即用冒泡排序之后,数列中X是原数列的第几个数?如何沟通?也希望给与解答,谢谢!

命题如下:
输入15个数存放在1个数组中,另输入1个数,要求用折半法找出该数是数组中的第几个元素的值.若该数不在数组中,则输出"无此数".(最好有查找完1个数后,可再输入1个数查找,依次类推).

(本人思路:先用冒泡法排序 然后折半法找数 最后求该数在原数列的位置)
貌似1楼的开新B做不到和A数组一起换哦
A使用冒泡排序法做的 B本身就已经是0-14排好的额~~

枫挚爱宇春 朋友 能不能在源程序上附带必要的说明?看的不是很明白呃。。THX'

我帮你编写的代码如下(很用心编写的哦):

#include "stdio.h"
#define N 15

void f1(int a[],int b[])
{
int i,j,t;
for(i=0;i<N;i++) b[i]=i+1;
for(j=0;j<N;j++)
for(i=j+1;i<N;i++)
if(a[i]<a[j])
{
b[i]=j+1;
b[j]=i+1;
t=a[i];
a[i]=a[j];
a[j]=t;
}
}

void f2(int a[],int b[],int num)
{
int bot=0,top=N-1,mid,flag=0;
while(flag==0)
{
mid=(bot+top)/2;
if(num<a[bot]||num>a[top]) flag=2;
else if(num==a[mid]) flag=1;
else if(num<a[mid]) top=mid-1;
else bot=mid+1;

}
if(flag==1) printf("the position of %d is %d\n",num,b[mid]);
if(flag==2) printf("not exist!\n");
}

void main()
{
int a[N],b[N],num,i;
printf("please input N numbers:\n");
for(i=0;i<N;i++) scanf("%d",&a[i]);
printf("p