I'm getting a 'Segmentation fault' program while running the following program.Please help me to find out the error.

Code://------------------------------------------------------------------------- int partition(int a[],int first,int last) { int pivot,up,down,i,j,n,pivindex,temp; up=first; down=last; pivot=a[first]; do { //move 'up' to the first value > pivot for(i=0;i<n;i++) { if(a[i]>pivot) up=i; } //move 'down' to the first value <=pivot for(i=n;i>0;i--) { if(a[i]<=pivot) down=i; } temp=a[up]; a[up]=a[down]; a[down]=temp; }while(up<=down); //Swap pivot and a[down] temp=a[first]; a[first]=a[down]; a[down]=temp; //Set pivindex at the current position of down //so that all values below pivindex are <=pivot //and vice versa pivindex=down; return pivindex; } //---------------------------------------------------------------------------- void quicksort(int a[],int first,int last) { int pivindex; if(first<last){ pivindex=partition(a,first,last); quicksort(a,first,pivindex-1); quicksort(a,pivindex+1,last); } } //----------------------------------------------------------------------------- main() { int a[20],n; printf("\nPlease enter the no. of elements::"); scanf("%d",&n); printf("\nPls enter the array to sorted(quick sort)::"); read_arr(a,n); printf("\nArray elements are as follows:\n"); print_arr(a,n); quicksort(a,0,n-1); printf("\n The Sorted list is:\n"); print_arr(a,n); } //-------------------------------------------------------------------------------