Hola buenas, os comento. Estoy desarrollando un algoritmo muy básico de ordenación que me han pedido para clase, no uno existente, sino uno que se nos ocurra. Se que en este campo ya hay mucho escrito pero me parece que la mejor forma de aprender es intentarlo uno mismo, sin buscar ideas por internet, por lo menos a priori. Asi que sin conocer ningún algoritmo de ordenación, y sin tener en cuenta la eficiencia de mi solución esto es lo que he hecho. El algoritmo funciona "a medias". Se ve a simple vista:
Output 1:
El problema viene cuando se repite algun numero.
Aqui se ve mas evidente, ordena hasta el cien, y luego pone el maximo. En vez de poner consecutivamente los repetidos.
Gracias de antemano!
Código (c) [Seleccionar]
#define BIGGEST 32767
void sort(int *non_sorted, int *sorted, int size)
{
//Flags
int *beggining = non_sorted;
int *end = (non_sorted + size);
//Pointers
int *current = beggining;
//Vars
int n_sorted = 0;
int last_minor_found = BIGGEST;
int last_sorted = 0;
while(n_sorted < size)
{
//Find minor bigger than last sorted
while(current != end)
{
if(*current < last_minor_found && *current > last_sorted)
{
last_minor_found = *current;
}
current++;
}
//Save in sorted array
*sorted = last_minor_found;
sorted++;
n_sorted++;
//Reinicialize
last_sorted = last_minor_found;
current = beggining;
last_minor_found = BIGGEST;
}
}
Output 1:
Código [Seleccionar]
Enter size of array: 10
Non sorted array:
67 69 29 80 14 61 88 99 4 58
Sorted array:
4 14 29 61 67 69 80 88 99 32767
El problema viene cuando se repite algun numero.
Aqui se ve mas evidente, ordena hasta el cien, y luego pone el maximo. En vez de poner consecutivamente los repetidos.
Código [Seleccionar]
Enter size of array: 200
Non sorted array:
2 21 85 19 70 91 82 93 29 100 76 34 85 81 61 9 31 28 75 76 37 53 42 40 12 74 16 66 88 68 49 41 40 85 60 61 75 93 53 3 92 80 89 29 60 49 89 90 28 64 17 64 16 59 55 27 84 22 44 71 41 44 64 80 81 75 41 55 67 45 10 10 25 50 38 84 50 79 26 77 42 42 92 9 52 46 88 36 68 31 58 8 27 73 40 7 47 80 13 65 76 74 75 100 75 64 36 24 42 13 52 35 6 43 44 58 89 31 45 56 61 54 15 39 27 54 97 25 85 62 90 61 35 16 12 10 79 99 33 73 11 37 7 69 79 50 78 67 80 22 74 93 27 41 31 5 94 80 30 31 41 71 43 75 86 54 36 64 5 21 36 67 57 43 35 35 44 12 54 24 85 79 16 12 19 98 68 65 77 49 95 17 19 89 44 4 42 79 20 98
Sorted array:
2 3 4 5 6 7 8 9 10 11 12 13 15 16 17 19 20 21 22 24 25 26 27 28 29 30 31 33 34 35 36 37 39 40 41 42 43 44 45 47 49 50 52 53 54 56 57 58 60 61 62 64 65 66 67 68 69 70 71 73 74 75 76 77 78 79 80 81 82 85 86 88 89 90 91 92 93 94 95 98 99 100 100 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767 32767
Gracias de antemano!