sort()是排序函數,用冒泡排序的方法將數組array從小到大排序
算法思路:
(1)輸入數組
(2)對數組進行排序
(3)調用findelem()進行查找,若查找元素比數組單元的值大則判斷下壹單元,直到x大於等於當前數組單元的值,則該單元的下標就是函數的返回值
#include<stdio.h>
#define LEN 5
int findelem(int elem);
int main()
{
int i;
int x;
int pos;
int array[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);
return 0;
}
void sort(int *parray)
{
int i,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;
}
}
}
int findelem(int elem, int *parray)
{
int i;
for(i=0;i<=LEN-1;i++)
{
if(parray[i]>=elem)
{
return(i);
break;
}
}
if(i>=LEN) return(i);
}
和其他人的壹樣,查找函數可以用二分查找進行優化,下面是二分查找算法寫的函數,沒有實際運行過,如果有問題歡迎追問
int findelem(int elem, int *parray)
{
int mid,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;} //重新求新的中間位置
}
}