I am having quite a strange problem. I am creating a quicksort program in c and whenever i try to set i=start in the for loop, it does not get assigned properly. See for your self:
#include <stdio.h>
int n=0;
void display(int *arr)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
}
void swap(int *arr,int x, int y)
{
    arr[x]=arr[x]+arr[y];
    arr[y]=arr[x]-arr[y];
    arr[x]=arr[x]-arr[y];
}
int partition(int *arr,int start,int end)
{
    int i,pindex;
    pindex=start;
    for(i=start;i<end;i++);                 
    {   printf("i=%d,start=%d,end=%d;",i,start,end);                                                                        |
        if(arr[i]<=arr[end])                
        {                                   
            swap(arr,i,pindex); 
            display(arr);                   
            pindex++;                       
        }                                   
    }                                       
    swap(arr,pindex,end);
    display(arr);
    return pindex;
}
void quicksort(int *arr,int start,int end)  
{
    int pindex;
    if(start<end)
    { 
        pindex=partition(arr,start,end);
        printf("---------------------\n");
        quicksort(arr,start,pindex-1);
        quicksort(arr,pindex+1,end);
    }
}
int main(int argc, char const *argv[])
{
    int arr[51];
    int i;
    printf("Enter number of elements: ");
    scanf("%d",&n);
    printf("Enter elements:\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    system("cls");
    printf("\n Current array:\n ");
    display(arr);
    printf("\n Sorted array:\n ");
    quicksort(arr,0,n-1);
    display(arr);
    return 0;
}
Now when I run this, i always gets assigned end and not start. Sample output:
Current array:
1 7 4 2
Sorted array:
i=3,start=0,end=3;2 7 4 1
2 1 4 7
---------------------
i=3,start=2,end=3;2 1 7 4
2 1 7 0
---------------------
2 1 7 0
I am stumped. Please help.
 
     
    