-2
votes

Tri du tableau de charcuterie C basé sur le contenu d'un autre tableau contenant les index

J'ai actuellement 2 tableaux:

char aSorted = {"Hello3", "Hello4", "Hello2", "Hello"};

c

5 commentaires

Qu'essayez-vous?


Ce n'est pas vraiment une question de tri, il s'agit de remplir un nouveau tableau basé sur les données que vous avez. Cela devrait être simple.


Allouer un tableau frais f , traverse B avec entier i , aseté [b [i]] = A [I] .


Ce commentaire aurait dû être une réponse.


Le code indiqué ne compile pas. Char A Ne définit pas de tableau, ni ne int b ou a asile .


3 Réponses :


0
votes
error: excess elements in char array initializer
  char chararray[4]={"H","I","J","K"};
                         ^

6 commentaires

Un tableau de 4 c Strings est Char * TRAY [4] et vous imprimez des chaînes avec le format "% s" .


Mais ce n'est pas ce que Shaun fait. Est-ce une faute de frappe?


Oui, c'est probablement une faute de frappe dans la question initiale. (La question ne montre pas beaucoup d'efforts.) Et j'ai mal compris votre dernière question aussi ou moins littérale, mais elle a été abordée à l'OP. Désolé pour ça.


Oui très vrai :) Peut-être que la question est différente et il l'interprétait différemment. Cela se produit si l'on est trop épuisé. Si nous regardons attentivement les chaînes, la question peut-être les ajuster comme selon le nombre qu'ils contiennent, comme par exemple hello2 dans la deuxième position et ainsi de suite. Quoi qu'il en soit, merci :)


Mais, une chose est sûre, mon algorithme donnera des performances horribles, si la matrice est aussi grande que celle indiquée. Vous avez des idées meilleures bro?


Pourquoi pensez-vous que la performance est horrible? Les données sont arbitraires et vous devez remplir chaque emplacement de la nouvelle matrice, vous ne pouvez donc pas être meilleur que O (n). Vous ne pouviez que vous rendre meilleur si vous saviez que vous n'avez que besoin d'échanger très peu d'ITAMS, mais nous n'avons pas cette information. Peut-être que vous confondez cela avec la complexité de nombreux algorithmes de tri, qui est O (n log (n)). O (journal (n)) est la complexité de la recherche binaire, mais cela n'a pas à visiter tous les articles.



0
votes

de cette Question :

Créer une structure avec les deux tableaux: P>

#include <stdlib.h>
#include <stdio.h>
struct myText
{
    char *A;
    int B;
};
typedef struct myText MyText;


int compareMyText (const void *v1, const void *v2) {
     const MyText *u1 = v1;
     const MyText *u2 = v2;
     return u1->B < u2->B;
}

int main () {
    MyText array[4];
    array[0].A = "Hello";
    array[0].B = 3;
    array[1].A = "Hello2";
    array[1].B = 2;
    array[2].A = "Hello3";
    array[2].B = 0;
    array[3].A = "Hello4";
    array[3].B = 1;

    qsort (array, 4, sizeof (MyText), compareMyText);

    for (int i = 0; i < 4; i++){
            printf ("%s - %d\n", array[i].A, array[i].B);
    }
    return 0;
}


4 commentaires

L'ISO C interdit les fonctions imbriquées.


@Edheal: parce que qsort () attend ceci. Ou je manque le point?


Vous pouvez simplement lancer le paramètre - et éviter ainsi des pointeurs de vide sauf dans la distribution


@Edheal: Utilisation de int (*) (const Void *, const Void *) Comme le type de la fonction de comparaison est un must. Et sinon je ne vois pas de pointeurs de vide.



-1
votes

Voici une solution .....

#include <stdio.h>

int main()
{
  char *A[] = {"Hello", "Hello2", "Hello3", "Hello4"};//declare A as char pointer
  int B[] = {3, 2, 0, 1};
  #define SIZE (sizeof B / sizeof (int)) //make code extensible;
                          //sizeof(int array)->"B" divided by sizeof(int)
  char *C[SIZE];           

  for(int i = 0; i < SIZE;i++){
    C[i] = A[B[i]]; //array C stores the sorted result
}

/* To print the result

  for(int i = 0; i < SIZE;i++){
    printf("%s ",C[i]);
  }
  putchar('\n');   
*/

  return 0;
}


1 commentaires

Ceci #define taille taille de (B) / taille de (b [0]) devrait mieux être #define Taille (A) (Tailleof (A) / Taille de * (A)) . Ensuite, utilisez-le comme Taille (B) .