Quicksort算法的不当结果

我正在按照我理解的方式实现quicksort算法,但无法获得预期的结果。我不知道哪里出问题了

#include <stdio.h>
void swap(int *a, int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
void quicksort(int a[], int l, int r)
{
    int i, j, temp;
    if(r > l)
    {
        i = l; j = r; temp = a[r];
        for(;;)
        {
            while(a[i] > temp) i++;
            while(a[j] < temp) j--;
            if(i >= j) break;
            swap(&a[i], &a[j]);
        }
        swap(&a[i], &a[r]);
        quicksort(a, l, i-1);
        quicksort(a, i+1, r);
    }
}
int main()
{
    int a[7]={5, 6, 10, 2, 4, 29, 15};
    int i, n;
    quicksort(a, 0, 6);
    for(i=0; i<7; i++)
    printf("%d ", a[i]);
    return 0;

}

正确的结果是

2 4 5 6 10 15 29

但我只是得到了无序的结果

29 5 10 2 4 6 15
评论