TORNEO
Publicado por hector (1 intervención) el 23/10/2002 07:41:35
URGENTE. Necesito el programa en C de ordenamiento por seleccion de arboles(TOURNAMENT).
Valora esta pregunta


0
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int value;
int index;
} Node;
void buildTournamentTree(Node *tournamentTree, int *array, int n) {
for (int i = 0; i < n; i++) {
tournamentTree[i].value = array[i];
tournamentTree[i].index = i;
}
for (int i = n; i < 2 * n - 1; i++) {
tournamentTree[i].value = INT_MAX; // Inicializar con un valor grande
tournamentTree[i].index = -1;
}
for (int i = n - 1; i > 0; i--) {
int left = 2 * i + 1;
int right = 2 * i + 2;
if (tournamentTree[left].value < tournamentTree[right].value) {
tournamentTree[i] = tournamentTree[left];
} else {
tournamentTree[i] = tournamentTree[right];
}
}
}
int extractMin(Node *tournamentTree, int n) {
Node minNode = tournamentTree[0];
tournamentTree[0].value = INT_MAX; // Marcar como eliminado
for (int i = 0; i < n; i++) {
if (tournamentTree[i].value != INT_MAX) {
int parent = (i - 1) / 2;
if (parent >= 0) {
if (tournamentTree[i].value < tournamentTree[parent].value) {
tournamentTree[parent] = tournamentTree[i];
}
}
}
}
return minNode.value;
}
void tournamentSort(int *array, int n) {
Node *tournamentTree = (Node *)malloc(sizeof(Node) * (2 * n - 1));
buildTournamentTree(tournamentTree, array, n);
for (int i = 0; i < n; i++) {
array[i] = extractMin(tournamentTree, n);
}
free(tournamentTree);
}
int main() {
int array[] = {5, 3, 8, 6, 2, 7, 4, 1};
int n = sizeof(array) / sizeof(array[0]);
tournamentSort(array, n);
printf("Array ordenado: ");
for (int i = 0; i < n; i++) {
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
gcc -o tournament_sort tournament_sort.c
./tournament_sort