Ir ao conteúdo

Posts recomendados

Postado

long long int merge_count(int A[], int B[], int p,int q,int r){

 int i,j,k;

  

 long long int c;

  

 for(i=p;i<=q;i++)

  B = A;

   

 for(j=q+1;j<=r;j++)

  B[r+q+1-j]=A[j];

   

 i = p;

 j = r;

 c = 0;

  

 for(k=p;k<=r;k++){

  if(B <= B[j]){

   A[k] = B;

   i = i+1;

  }else{

   A[k] = B[j];

   j = j-1;

   c = c + (q-i+1);

  }

 }

  

 return c;

 

}

 

 

 

long long int sort_count(int A[], int B[], int i,int j){

 int q;

 if(i >=j ) return 0;

 else{

  q = (i+j)/2;

  return sort_count(A, B, i, q) +

      sort_count(A, B, q+1, j)+

      merge_count(A, B, i, q, j); 

 }

  

}

Postado
15 minutos atrás, Geovanecrawler disse:

 for(i=p;i<=q;i++)

  B = A;

 

Está certo sobre essa linha ai? 

 

A e B são ponteiros para int então talvez não fosse o que quer escrever. Vai perder o acesso ao vetor B e vai repetir isso várias vezes...

 

Em relação a C e C++ não vejo nada especial aí a ser "convertido"

Postado
1 minuto atrás, Geovanecrawler disse:

Precisava desse programa em c.

 

Como eu disse não vejo nada de especial a ser "convertido". Está seguro sobre aquela linha? acho que não faz sentido nem em C nem em C++

 

A e B são int* declarados em long long int merge_count(int A[], int B[], int p,int q,int r)

Postado

Em si eu vi esse c++ para resolver este problema abaixo.

 

Neste exemplo, temos 3  inversões nestas sequência: (2,1), (4,1) e (4,3). Note que uma cada intersecção de um par de segmentos corresponde a uma inversão.

 

Seja S[0...n - 1] um vetor com n inteiros positivos distintos. Se i < j e S > S[j] então (i, j) é uma inversão de S. Dado n e um vetor S, sua tarefa é contar o número de inversões em S.

 

Para cada caso de teste, a primeira linha deve conter um identificador do conjunto de teste, no formato “Teste i”, onde i é numerado a partir de 1, na próxima linha imprima o número de inversões do “Teste i”.

 desculpe eu não especificar direito.

adicionado 0 minutos depois

precisava dele em c

Postado

Bem, como eu disse não vejo muito a ser convertido de C++ para C aí. São apenas duas funções, não tem classes, não alocam memória nem nada.

Aquele primeiro loop de que falei não tem sentido em C ou C++ por exemplo

 

O código abaixo, que é o mesmo que postou, compila em C. Mas duvido que resolva algo.

long long int merge_count(int A[], int B[], int p, int q, int r)
{
    int i, j, k;
    long long int c;

    for (i = p; i <= q; i++) B = A;

    for (j = q + 1; j <= r; j++)
        B[r + q + 1 - j] = A[j];

    i = p;
    j = r;
    c = 0;

    for (k = p; k <= r; k++) {

        if (B <= B[j])
        {
            A[k] = B;
            i = i + 1;
        }
        else
        {
            A[k] = B[j];
            j = j - 1;
            c = c + (q - i + 1);
        }    // end for
    }    // end for

    return c;
}    // end merge_count()


long long int sort_count(int A[], int B[], int i, int j)
{
    int q;
    if (i >= j) return 0;
    q = (i + j) / 2;
    return  sort_count(A, B, i, q) +
            sort_count(A, B, q + 1, j) +
            merge_count(A, B, i, q, j);
}    // end sort_count()

Por outro lado...

20 minutos atrás, Geovanecrawler disse:

Neste exemplo, temos 3  inversões nestas sequência: (2,1), (4,1) e (4,3). Note que uma cada intersecção de um par de segmentos corresponde a uma inversão.

 

Seja S[0...n - 1] um vetor com n inteiros positivos distintos. Se i < j e S > S[j] então (i, j) é uma inversão de S. Dado n e um vetor S, sua tarefa é contar o número de inversões em S

 

Aqui o texto mostra uma sequência de vetores (x,y) e depois um vetor com uma única dimensão

 

E não seria i<j e S > S[j] ? O que seria S[j] em relação a S? não é só um elemento do vetor?

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...