findelem()就是查找函数,查找输入的参数x在数组array的位置,函数返回元素在array中的单元下标sort()是排序函数,用冒泡排序的方法将数组array从小到大排序算法思路:(1)输入数组(2)对数组进行排序(3)调用findelem()进行查找,若查找元素比数组单元的值大则判断下一单元,直到x大于等于当前数组单元的值,则该单元的下标就是函数的返回值#include<stdio.h>#defineLEN5intfindelem(intelem);intmain(){inti;intx;intpos;intarray[LEN]={0};printf("请输入数组:");for(i=0;i<=LEN-1;i++)scanf("%d",&array[i]);printf("请输入要查找的数:");scanf("%d",&x);sort(array);pos=findelem(x,array);printf("%d在数组的位置为:%d\n",x,pos);return0;}voidsort(int*parray){inti,j,tmp;for(i=1;i<=LEN-1;i++)for(j=0;j<=LEN-i-1;j++){if(parray[j]>parray[j+1]){tmp=parray[j];parray[j]=parray[j+1];parray[j+1]=tmp;}}}intfindelem(intelem,int*parray){inti;for(i=0;i<=LEN-1;i++){if(parray[i]>=elem){return(i);break;}}if(i>=LEN)return(i);}和其他人的一样,查找函数可以用二分查找进行优化,下面是二分查找算法写的函数,没有实际运行过,如果有问题欢迎追问intfindelem(intelem,int*parray){intmid,upper,lower;upper=LEN;lower=1;mid=(upper+lower)/2;while(1){if(elem==parray[mid])return(mid);if(elem==parray[mid-1])return(mid-1);if(elem>parray[mid-1]&&elem<parray[mid])return(mid);if(elem<parray[mid-1])//若elem比parray[mid-1],则elem必定在数组mid-1的前面部分{upper=mid-2;//重新设置查找的上届mid=(upper+lower)/2;}//重新求新的中间位置if(elem>parray[mid])//若elem比parray[mid],则elem必定在数组mid的后面部分{lower=mid+1;/重新设置查找的下届mid=(upper+lower)/2;}//重新求新的中间位置}}
阅读全文 >