1
0
szdytom 1 жил өмнө
parent
commit
3728c02b87
1 өөрчлөгдсөн 10 нэмэгдсэн , 10 устгасан
  1. 10 10
      src/common/algorithm.c

+ 10 - 10
src/common/algorithm.c

@@ -2,14 +2,14 @@
 #include <string.h>
 #include <stdlib.h>
 
-static void merge(void* a_begin,
-                  void* a_end,
-                  void* b_begin,
-                  void* b_end,
-                  void* res,
+static void merge(char* a_begin,
+                  char* a_end,
+                  char* b_begin,
+                  char* b_end,
+                  char* res,
                   int elem_size,
                   int (*cmp)(const void* a, const void* b)) {
-    void *a = a_begin, *b = b_begin, *r = res;
+    char *a = a_begin, *b = b_begin, *r = res;
     while(a < a_end && b < b_end) {
         if(cmp(a, b) <= 0) {
             memcpy(r, a, elem_size);
@@ -28,15 +28,15 @@ static void merge(void* a_begin,
         memcpy(r, b, elem_size);
 }
 
-void c11__stable_sort(void* ptr,
+void c11__stable_sort(void* ptr_,
                       int count,
                       int elem_size,
                       int (*cmp)(const void* a, const void* b)) {
     // merge sort
-    void* tmp = malloc(count * elem_size);
+    char* ptr = ptr_, *tmp = malloc(count * elem_size);
     for(int seg = 1; seg < count; seg *= 2) {
-        for(void* a = ptr; a < ptr + (count - seg) * elem_size; a += 2 * seg * elem_size) {
-            void* b = a + seg * elem_size, *a_end = b, *b_end = b + seg * elem_size;
+        for(char* a = ptr; a < ptr + (count - seg) * elem_size; a += 2 * seg * elem_size) {
+            char* b = a + seg * elem_size, *a_end = b, *b_end = b + seg * elem_size;
 			if (b_end > ptr + count * elem_size)
 				b_end = ptr + count * elem_size;
 			merge(a, a_end, b, b_end, tmp, elem_size, cmp);