Como implementar quickSort em uma matriz, em C?

Olá! Meu objetivo é fazer um código que recebe uma matriz e deve verificar quantas linhas são outliers. Pra isso, preciso ordenar cada uma das linhas e verificar em cada linha se o elemento na posição k+1 é maior que o limiar, caso seja, é um outlier. Esse é meu código:

#include <stdlib.h>

void quickSort(int n, double M()(n), int esq, int dir, int linha){
    int i = esq;
    int j = dir;
    double pivo;
    int meio;
    double aux;
    
    meio = (int) (i+j)/2;
    pivo = M(linha)(meio);
    
    while(j > i){
        while(M(linha)(i) < pivo) i++;
        while(M(linha)(j) > pivo) j--;
        
        if (i <= j){
            aux = M(linha)(i); M(linha)(i) = M(linha)(j); M(linha)(j) = aux;
            i++; j--;
        }
    };
    if (esq < j) quickSort(n, M, esq, j, linha);
    if (i < dir) quickSort(n, M, i, dir, linha);
}

int main(){
    int n, k;
    int outliers = 0;
    double l;
    int i, j;
    double v(500)(500);
    
    scanf("%d %d %lf", &n, &k, &l);
    for (i = 0; i < n; i++)
        for(j = 0; j < n; j++){
        scanf("%lf", &v(i)(j));
}
    
    for(i=0; i<n; i++){
        quickSort(n, v, 0, n-1, i);
        if (v(i)(k+1) > l) outliers++;
}

    printf("%d", outliers);
    return 0;
}

A ideia é que a função quickSort receba os parâmetros com a linha sendo igual a “i”, começando em 0 e indo até n, sendo assim, a primeira iteração ordenaria v(0)(j), enquanto a segunda ordenaria v(1)(j) e assim por diante. O problema é que esse programa só ordena a primeira linha, mantendo todas as outras exatamente da maneira em que estava, e eu não consigo identificar o problema.

Alguém pode me ajudar?