代码,运行,失败,求求解解

Problem Description
使用快速排序的随机化版本对输入的n个整数,按照从小到大的顺序排序。
Input Description
第一行输入一个整数n(0<n<=100000)。
第二行输入n个整数。
Output Description
输出排序后的n个整数,每个整数之间以一个空格分隔。注意:最后一个整数后面没有空格。
Sample Input
6
5 2 4 6 1 3
Sample Output
1 2 3 4 5 6

img

#include <iostream>
#include <vector>

using namespace std;

void quicksort(vector<int>& arr, int left, int right) {
    if (left >= right) {
        return;
    }
    int pivot = arr[left];
    int i = left + 1, j = right;
    while (i <= j) {
        while (i <= j && arr[i] < pivot) {
            ++i;
        }
        while (i <= j && arr[j] >= pivot) {
            --j;
        }
        if (i < j) {
            swap(arr[i], arr[j]);
        }
    }
    swap(arr[left], arr[j]);
    quicksort(arr, left, j - 1);
    quicksort(arr, j + 1, right);
}

int main() {
    int n;
    cin >> n;
    vector<int> arr(n);
    for (int i = 0; i < n; ++i) {
        cin >> arr[i];
    }
    quicksort(arr, 0, n - 1);
    for (int i = 0; i < n; ++i) {
        cout << arr[i];
        if (i < n - 1) {
            cout << " ";
        }
    }
    return 0;
}


#include<iostream>
#include<cstdio>
using namespace std;
int n,a[10000001];
void qsort(int i,int j)
{
    int mid,l,r;
    mid=a[(i+j)/2+1];
    l=i;
    r=j;
    while(i<=j)
    {
        while(a[i]<mid)i++;
        while(a[j]>mid)j--;
        if(i<=j)
        {
            a[0]=a[i];
            a[i]=a[j];
            a[j]=a[0];
            i++;
            j--;
        }
    }
    if(l<j)
    qsort(l,j);
    if(i<r)
    qsort(i,r);
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    qsort(1,n);
    for(int i=1;i<=n;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

(好似不是这样)。。。。。(_管他对不对,交就完了_)