快速排序只有一次排序??

今天在复习排序算法的时候做了快速排序的代码,但是经过编译发现只进行了一次排序,但是我多次检查没有找出自己的错误,不知道自己哪里出现了问题。希望广大的网友能够伸出援助之手。

//快速排序 
void QickSort(int nums[N],int left,int right){//只进行了一次排序? 
    if(left<right){
        int temp;
        int i=left;
        int j=right;
        int x=nums[left];//选定第一个数值作为基准
        while(i<j){ 
            while(i<j && nums[j]>=x){//找出右边小于基准的数组元素 
                j--;//指向小于基准的数值 
            }
            while(i<j && nums[i]<=x){//找出左边大于基准的数组元素 
                i++;//指向大于基准的数值 
            } 
            if(i<j){//交换左边大于基准的数值与右边小于基准的数值的位置 
                temp=nums[j];//存储小于基准的数值 
                nums[j]=nums[i];
                nums[i]=temp;
            }
        }
        //找到基准所在数组的准确位置并且发生交换 
            nums[left]=nums[i];
            nums[i]=x;
                
        QickSort(&nums[N],left,i-1);//左边(小于)基准数组 
        QickSort(&nums[N],i+1,right); //右边(大于)基准数组
    }  
}
输入数据:12 18 9 20 13 4
输出结果: 9 12 18 20 13

25行,26行不对,&nums[N]是什么鬼?把那个直接改成nums

#include<stdio.h>
//快速排序
#define N 6
void QickSort(int nums[],int left,int right)
{   //只进行了一次排序?
    if(left<right) {
        int temp;
        int i=left;
        int j=right;
        int x=nums[left];//选定第一个数值作为基准
        while(i<j) {
            while(i<j && nums[j]>=x) { //找出右边小于基准的数组元素
                j--;//指向小于基准的数值
            }
            while(i<j && nums[i]<=x) { //找出左边大于基准的数组元素
                i++;//指向大于基准的数值
            }
            if(i<j) { //交换左边大于基准的数值与右边小于基准的数值的位置
                temp=nums[j];//存储小于基准的数值
                nums[j]=nums[i];
                nums[i]=temp;
            }
        }
        //找到基准所在数组的准确位置并且发生交换
        nums[left]=nums[i];
        nums[i]=x;

        QickSort(nums,left,i-1);//左边(小于)基准数组
        QickSort(nums,i+1,right); //右边(大于)基准数组
    }
}

int main()
{
    int t[6]= {12, 18, 9, 20, 13, 4};
    QickSort(t,0,N-1);
    for(int j=0; j<N; j++)
        printf("%d ",t[j]);
    return 0;
}