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?