快速排列 C语言 测试点四个WA不知道错在哪里


#include<stdio.h>
int n,a[100001];
void swap(int *a,int *b){
int t; 
t=*a;*a=*b;*b=t; 
}
void quicksort(int a[],int l,int r)
{
    if(l=r) return ;   
    int i=l,j=r,k=a[l];
    while(l!=r){
       while(l<r&&a[j]>=k)
         j--;
         swap(&a[i],&a[j]);
       while(l<r&&a[i]<=k)
         i++;
         swap(&a[i],&a[j]);
    }
    quicksort(a,l,i-1);
    quicksort(a,i+1,r);
}
int main()
{
    int i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    scanf("%d",&a[i]);
    quicksort(a,1,n);
    for(i=1;i<=n;i++)
    printf("%d ",a[i]);
    return 0;
}
问题相关代码,请勿粘贴截图
我想要达到的结果

WA是啥意思呢?
if(l=r) return;
改为
if(l==r) return;
==是判断相等,=是赋值

逻辑错了,代码修改如下:

#include<stdio.h>
int n,a[100001];
void quicksort(int *arr, int low, int high)
{
    if (low < high)
    {
        int i = low;
        int j = high;
        int k = arr[low];
        while (i < j)
        {
            while(i < j && arr[j] >= k)     // 从右向左找第一个小于k的数
            {
                j--;
            }

            if(i < j)
            {
                arr[i++] = arr[j];
            }

            while(i < j && arr[i] < k)      // 从左向右找第一个大于等于k的数
            {
                i++;
            }

            if(i < j)
            {
                arr[j--] = arr[i];
            }
        }

        arr[i] = k;

        // 递归调用
        quicksort(arr, low, i - 1);     // 排序k左边
        quicksort(arr, i + 1, high);    // 排序k右边
    }
}

int main()
{
    int i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    quicksort(a,0,n);
    for(i=1;i<=n;i++)
        printf("%d ",a[i]);
    return 0;
}


快排的讲解可以看一下下面的文章: