Some theory:
code:
/* Count Frequency in an Array Syed Ahmed Zaki -- 2017 */ #include<stdio.h> int findcount(int A[],int n,int x) { int i,count=0; for(i=0; i<=n-1; i++) { if(A[i]==x) { count=count+1; } } return count; } int main() { int A[]= {1,1,3,3,5,5,5,5,9,9,11}; int x; scanf("%d",&x); int i=findcount(A,11,x); printf("%d is %d times",x,i); return 0; }
Optimized Code: Using Binary Search
/* Count Frequency in an Array(Optimized Version) Syed Ahmed Zaki -- 2017 */ #include<cstdio> int findcount(int A[],int n,int x, bool searchFirst) { int low=0, high=n-1, result=-1; while(low<=high) { int mid=(low+high)/2; if(A[mid]==x) { result=mid; if(searchFirst){ high=mid-1; //gp on searching towards left(indice onujayi) } else{ low=mid+1;//go on searching towards right(higher indices) } } else if(x<A[mid]) { high=mid-1; } else { low=mid+1; } } return result; } int main() { int A[]= {1,1,3,3,5,5,5,5,9,9,11}; int x; scanf("%d",&x); int firstIndex=findcount(A,sizeof(A)/sizeof(A[0]),x,true); if(firstIndex == -1){ printf("Count of %d is %d",x,0); } else{ int lastIndex=findcount(A,sizeof(A)/sizeof(A[0]),x,false); printf("%d is %d times",x,lastIndex-firstIndex+1); } return 0; }