c - Random Selection -i'th order statistic -
the random selection program below doesn't find i'th order statistic. following program follows algorithm provided in cormen's introduction algorithm. in advance finding bug.
#include<stdio.h> #include<stdlib.h> int random(int a,int b) //generates random numbers [a,b] { return a+(rand()%(b-a+1)); } void swap(int *a,int *b) //swwaps elements { int temp; temp=*a; *a=*b; *b=temp; } int partition(int a[],int p,int r) //partitioning similar of quicksort { int i=p-1,j,x=a[r]; for(j=p;j<r;j++) { if(a[i]<x) { i++; swap(&a[i],&a[j]); } } swap(&a[i+1],&a[r]); return i+1; } int random_partition(int a[],int p,int r) //random index generation element gets swapped last element of array { int q=random(p,r); swap(&a[q],&a[r]); return partition(a,p,r); } int random_selection(int a[],int p,int r,int index) //finds i'th order statistic { if(p==r) return a[p]; if(p<r) { int mid,k; mid=random_partition(a,p,r); k=mid-p+1; if(k==index) return a[mid]; if(index<k) return random_selection(a,p,mid-1,index); if(index>k) return random_selection(a,mid+1,r,index); } } main() { int a[50],i,size,index; printf("enter size of array\n"); scanf("%d",&size); printf("enter array elements\n"); //takes array elements input for(i=1;i<=size;i++) { scanf("%d",&a[i]); } for(i=1;i<=size;i++) //prints index of each element { printf("%d\n",random_selection(a,1,size,i)); } }
do need srand() in main()? these threads recommended way initialize srand? , how srand relate rand function?
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i, n; time_t t; n = 5; /* intializes random number generator */ srand((unsigned) time(&t)); /* print 5 random numbers 0 50 */ for( = 0 ; < n ; i++ ) { printf("%d\n", rand() % 50); } return(0); }
Comments
Post a Comment