diff --git a/alglib/apps/playlist.c b/alglib/apps/playlist.c index 48434362bc4875d04b5e63dff966390e2bb8b48b..4baabcb90cb096c75cc61f8c62ece335303e3ad0 100644 --- a/alglib/apps/playlist.c +++ b/alglib/apps/playlist.c @@ -144,22 +144,22 @@ void playlist_sort(playlist_t playlist, playlist_sorting_criterion_t order_by) * compar * ); */ + // per l'ordinamento multi criterio può funzionare solo il merge sort perché + // è l'unico stabile tra i presenti + upo_merge_sort( + playlist->entries, + playlist->size, + sizeof(*(playlist->entries)), + compar + ); /* - * upo_merge_sort( + * upo_quick_sort( * playlist->entries, * playlist->size, * sizeof(*(playlist->entries)), * compar * ); - */ - // penso che per l'ordinamento multi criterio debba funzionare solo questo perché è l'unico - // stabile ma risultano alcune tracce messe dove non dovrebbero essere - upo_quick_sort( - playlist->entries, - playlist->size, - sizeof(*(playlist->entries)), - compar - ); + */ } diff --git a/alglib/src/sort.c b/alglib/src/sort.c index 3a11b90f83be28278d2c4be0f12b33c2b393d15f..74f0d56a192d262442fd6c121d66a845d0a6dce1 100644 --- a/alglib/src/sort.c +++ b/alglib/src/sort.c @@ -84,7 +84,7 @@ static void upo_merge_sort_merge( unsigned char *curr1 = (unsigned char *)base1 + i1 * size; unsigned char *curr2 = (unsigned char *)base2 + i2 * size; unsigned char *currtmp = tmp + (i1 + i2) * size; - if (cmp(curr1, curr2) < 0) { + if (cmp(curr1, curr2) <= 0) { memcpy(currtmp, curr1, size); ++i1; } else {