Algoritmo de ordenación.

Iniciado por Leafar77, 11 Febrero 2015, 15:03 PM

0 Miembros y 1 Visitante están viendo este tema.

Leafar77

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:


#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:

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.

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!

NOIS

No he probado el código, pero creo que el error está en que siempre evalúas el menor, nunca si es igual, por lo que es incapaz de coger los valores repetidos y actuar con "coherencia", como se puede ver :xD.

Espero que te ayude.

Saludos!
NOIS dev7