Je reçois une erreur "Définition multiple de swap" de la fonction Swap. Ce code est pour le tri de sélection.
3 Réponses :
Vous devez renvoyer - déclarer le prototype de la fonction, de sorte que, si la fonction est appelée, le compilateur est conscient du type de retour de la fonction et des arguments attendus.
Ajouter P>
int swap (int [], int *, int *);
Vous devez inclure une méthode signature int Swap (int Arr [], int * i, int * j); code> avant utilisation (c'est-à-dire avant bidirectionnel ...). Comme c'est le cas, c crée une "déclaration implicite" qui ne conduit pas avec ce que vous avez écrit. Si vous utilisez GCC, vous pouvez ajouter -wall ou -WIMPLIMPLICITÉ ou -WIMPLICIT-FONCTION-DÉCLARATION À LA LIGNE DE COMMANDE afin qu'il vous indique que c'est ce qui se passe. P>
Le compilateur lit le fichier de haut en bas. Si elle voit Vous devez soit: P> ou p> échange code> par
swap (arr, i, min_i); code> à l'intérieur du
bidirectionalselectionsort code>, il ne sait pas ce que c'est.
Swap CODE> et placez-la avant la définition de
BidirectionalSelectionsTRéstion CODE> LI>
ol>
Swap code> avant la définition de la fonction de
BidirectionalSelectionsTr. / code>. Li>
OL>
#include <stdio.h>
#include <string.h>
void swap (int **arr, int i, int j)
{
int temp = (*arr)[i];
(*arr)[i] = (*arr)[j];
(*arr)[j] = temp;
return;
}
static void BiDirectionalSelectionSort(int arr[], int n)
{
for (int i = 0, j = n - 1; i < j; i++, j--)
{
int min = arr[i], max = arr[i];
int min_i = i, max_i = i;
for (int k = i; k <= j; k++)
{
if (arr[k] > max)
{
max = arr[k];
max_i = k;
}
else if (arr[k] < min)
{
min = arr[k];
min_i = k;
}
}
swap(&arr, i, min_i);
if (arr[min_i] == max)
swap(&arr, j, min_i);
else
swap(&arr, j, max_i);
}
}
int main (void)
{
int arr[] = { 20, 15, 8, 10, 5, 7, 6, 2, 9, 1 };
size_t n = sizeof (arr) / sizeof (*arr);
BiDirectionalSelectionSort(arr, n);
printf("Array:\n");
for (size_t i = 0; i < n; i++)
{
printf("arr[%d] = %d\n", i, arr[i]);
}
}
Bonjour merci de donner une solution et de la fixation de la minuscule erreur du code. Il semble que le code fonctionne bien, mais il n'y a pas d'affichage de sortie. Je reçois peu de messages d'avertissement qui a déclaré «échanger» rend le pointeur d'entier sans couler
@tyler premier, lequel des deux versions / méthodes utilisez-vous?
Les deux version sortent le même avertissement.
@tyler ah ok, alors il a quelque chose à voir avec votre code. Je vérifie actuellement.
@Tyler Votre code avait plusieurs problèmes problématiques. Trop pour expliquer tout en détail. Habituellement, je ne fais pas ça, mais j'ai réparé tous. Jetez un coup d'œil à ce que j'ai changé. Maintenant, tout fonctionne comme il devrait et donne la sortie souhaitée.
Merci pour les détails.
Quel compilateur utilisez-vous et comment l'appelez-vous? Vous devriez obtenir d'autres erreurs, en particulier avec
principal code>.
En C ++, les fonctions doivent être déclarées avant leur utilisation.