7-20 Ordenar com Troca (0, i) (25 分)

título

Aqui Insert Picture Descrição

análise:

Sequência pode ser encontrado em vários anéis, os elementos em cada anel pode ser ordenados de modo a que o elemento anelar interior na posição correcta, a amostra pode ser encontrado ir novamente, em uma troca elemento em anel requer um número mínimo de elementos operação -1-fim podem ser classificados, porque o único 0 e troca, se o anel inclui 0, em seguida, o número de elementos precisam ser trocados -1-fim, de outro modo, é necessário para a troca de 0 para dentro do anel, e, em seguida, troca os elementos precisam de ser trocados -1 + 2 + 1 número de vezes que é o número de elementos. Então não trocar se um elemento já em vigor.

código:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n,s[100000],ans = 0;
    scanf("%d",&n);
    for(int i = 0;i < n;i ++) {
        scanf("%d",&s[i]);
    }
    for(int i = 0;i < n;i ++) {
        int k = s[i];
        int c = 0;
        while(s[k] != k) {
            c ++;
            int t = k;
            k = s[k];
            s[t] = t;
        }
        if(c == 0) continue;
        if(i == 0) ans += c - 1;
        else ans += c + 1;
    }
    printf("%d",ans);
}
Publicado 61 artigos originais · ganhou elogios 7 · vista 3617

Acho que você gosta

Origin blog.csdn.net/weixin_42469716/article/details/105182407
Recomendado
Clasificación