From f8c6ae50bd76d6b22c3fb07d63279e7ca37f7ea3 Mon Sep 17 00:00:00 2001
From: 20041679 <->
Date: Mon, 8 Jan 2024 23:58:05 +0100
Subject: [PATCH] fix mergesort

---
 alglib/apps/playlist.c | 20 ++++++++++----------
 alglib/src/sort.c      |  2 +-
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/alglib/apps/playlist.c b/alglib/apps/playlist.c
index 4843436..4baabcb 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 3a11b90..74f0d56 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 {
-- 
GitLab