當前位置:編程學習大全網 - 編程語言 - 判斷壹個數是否是數組中的成員,用C語言如何編程?

判斷壹個數是否是數組中的成員,用C語言如何編程?

findelem()就是查找函數,查找輸入的參數x在數組array的位置,函數返回元素在array中的單元下標

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;} //重新求新的中間位置

}

}

  • 上一篇:悠閑生活就選雷克薩斯NX200,動力雖不夠給力,但舒適卻無可取代
  • 下一篇:《給孩子講大數據》讀後感怎麽寫?
  • copyright 2024編程學習大全網