C语言递归实现快速排序,希望大家帮我改一下bug,然后写一下出现bug的具体原因,细一点,谢啦

#include <stdio.h>
#include <time.h>
#define N 100
void Swap(int *p, int *q);
int Median3(int A[], int Left, int Right);
void QuickSort(int A[],int Left, int Right);
void Println(int A[], int Len);
int main() {
int A[N] = {0};
int i, len;//
printf("请输入数组长度:\n");
scanf("%d",&len);// printf("请输入数组元素:\n");
for(i = 0; i < len; i++) { scanf("%d",&A[i]); }
QuickSort(A,0,len-1);
Println(A,len); return 0;}
void Swap(int *p, int *q) { int temp = *p; *p = *q; *q = temp; }
int Median3(int A[], int Left, int Right) {
int Center = (Left + Right)/2;
if(A[Left] > A[Center]) {
Swap(&A[Left],&A[Center]); }
if(A[Left] > A[Right]) { Swap(&A[Left],&A[Right]); }
if(A[Center] > A[Right]) { Swap(&A[Center],&A[Right]); } Swap(&A[Center],&A[Right-1]);
return A[Right-1];}
void QuickSort(int A[],int Left, int Right) { int Pivot, Low = 0, High = 0;
Pivot = Median3(A, Left, Right); Low = Left, High = Right-1;
while(1) {while(A[++Low] < Pivot); while(A[--High] > Pivot);
if(Low < High)
Swap(&A[Low],&A[High]);
else break; }
Swap(&A[Low],&A[Right-1]);
QuickSort(A, Left, Low-1);
QuickSort(A, Low+1, Right);}
void Println(int A[], int Len) {
int i = 0; for(i = 0; i < Len; i++) {
printf("%d ",A[i]);//
if(i != Len-1)// printf(" ");//注意IO流问题; }}

QuickSort 没有考虑left>=right情况

#include<stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 100
void Swap(int *p, int *q);
int Median3(int A[], int Left, int Right);
void QuickSort(int A[], int Left, int Right);
void Println(int A[], int Len);
int main()
{
    int A[] = {4, 3, 2, 1, 6, 8};
    int i, len; //
    len = sizeof(A)/sizeof(int);
    // printf("请输入数组长度:\n");
    // scanf("%d", &len); // printf("请输入数组元素:\n");
    // for (i = 0; i < len; i++)
    // {
    //     scanf("%d", &A[i]);
    // }
    QuickSort(A, 0, len - 1);
    Println(A, len);
    system("pause");
}
void Swap(int *p, int *q)
{
    int temp = *p;
    *p = *q;
    *q = temp;
}
int Median3(int A[], int Left, int Right)
{
    int Center = (Left + Right) / 2;
    if (A[Left] > A[Center])
    {
        Swap(&A[Left], &A[Center]);
    }
    if (A[Left] > A[Right])
    {
        Swap(&A[Left], &A[Right]);
    }
    if (A[Center] > A[Right])
    {
        Swap(&A[Center], &A[Right]);
    }
    Swap(&A[Center], &A[Right - 1]);
    return A[Right - 1];
}
 
void QuickSort(int A[], int Left, int Right)
{
    if(Left>=Right) return;
    int Pivot, Low = 0, High = 0;
    Pivot = Median3(A, Left, Right);
    Low = Left, High = Right;
    while (Low<High){
        while(A[++Low] < Pivot);
        while (A[--High] > Pivot);      
        if (Low < High)
            Swap(&A[Low], &A[High]);       
    }
    QuickSort(A, Left, High);
    QuickSort(A, High+1, Right);
}
void Println(int A[], int Len)
{
    int i = 0;
    for (i = 0; i < Len; i++)
    {
        printf("%d ", A[i]); 
        if (i != Len - 1)    
            printf(" ");//注意IO流问题;
    }
}
/*
6
4 3 2 1 6 8
*/

题主的实现有些麻烦了

#include <stdio.h>
#include <stdlib.h>
#define MAX 10
//单个记录的结构体
typedef struct {
    int key;
}SqNote;
//记录表的结构体
typedef struct {
    SqNote r[MAX];
    int length;
}SqList;
//此方法中,存储记录的数组中,下标为 0 的位置时空着的,不放任何记录,记录从下标为 1 处开始依次存放
int Partition(SqList *L,int low,int high){
    L->r[0]=L->r[low];
    int pivotkey=L->r[low].key;
    //直到两指针相遇,程序结束
    while (low<high) {
        //high指针左移,直至遇到比pivotkey值小的记录,指针停止移动
        while (low<high && L->r[high].key>=pivotkey) {
            high--;
        }
        //直接将high指向的小于支点的记录移动到low指针的位置。
        L->r[low]=L->r[high];
        //low 指针右移,直至遇到比pivotkey值大的记录,指针停止移动
        while (low<high && L->r[low].key<=pivotkey) {
            low++;
        }
        //直接将low指向的大于支点的记录移动到high指针的位置
        L->r[high]=L->r[low];
    }
    //将支点添加到准确的位置
    L->r[low]=L->r[0];
    return low;
}
void QSort(SqList *L,int low,int high){
    if (low<high) {
        //找到支点的位置
        int pivotloc=Partition(L, low, high);
        //对支点左侧的子表进行排序
        QSort(L, low, pivotloc-1);
        //对支点右侧的子表进行排序
        QSort(L, pivotloc+1, high);
    }
}
void QuickSort(SqList *L){
    QSort(L, 1,L->length);
}
int main() {
    SqList * L=(SqList*)malloc(sizeof(SqList));
    L->length=8;
    L->r[1].key=19;
    L->r[2].key=28;
    L->r[3].key=35;
    L->r[4].key=97;
    L->r[5].key=76;
    L->r[6].key=13;
    L->r[7].key=17;
    L->r[8].key=49;
    L->r[8].key=66;
    QuickSort(L);
    for (int i=1; i<=L->length; i++) {
        printf("%d ",L->r[i].key);
    }
    return 0;
}