mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 03:20:18 +00:00
...
This commit is contained in:
parent
92090aeaa1
commit
3e7af41e1f
@ -34,7 +34,7 @@
|
|||||||
* `strcmp`.
|
* `strcmp`.
|
||||||
*/
|
*/
|
||||||
bool c11__stable_sort(void* ptr,
|
bool c11__stable_sort(void* ptr,
|
||||||
int count,
|
int length,
|
||||||
int elem_size,
|
int elem_size,
|
||||||
int (*f_lt)(const void* a, const void* b, void* extra),
|
int (*f_lt)(const void* a, const void* b, void* extra),
|
||||||
void* extra);
|
void* extra);
|
||||||
|
@ -33,16 +33,16 @@ static bool merge(char* a,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool c11__stable_sort(void* ptr_,
|
bool c11__stable_sort(void* ptr_,
|
||||||
int count,
|
int length,
|
||||||
int elem_size,
|
int elem_size,
|
||||||
int (*f_lt)(const void* a, const void* b, void* extra),
|
int (*f_lt)(const void* a, const void* b, void* extra),
|
||||||
void* extra) {
|
void* extra) {
|
||||||
// merge sort
|
// merge sort
|
||||||
char *ptr = ptr_, *tmp = malloc(count * elem_size);
|
char *ptr = ptr_, *tmp = malloc(length * elem_size);
|
||||||
for(int seg = 1; seg < count; seg *= 2) {
|
for(int seg = 1; seg < length; seg *= 2) {
|
||||||
for(char* a = ptr; a < ptr + (count - seg) * elem_size; a += 2 * seg * elem_size) {
|
for(char* a = ptr; a < ptr + (length - seg) * elem_size; a += 2 * seg * elem_size) {
|
||||||
char *b = a + seg * elem_size, *a_end = b, *b_end = b + 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;
|
if(b_end > ptr + length * elem_size) b_end = ptr + length * elem_size;
|
||||||
bool ok = merge(a, a_end, b, b_end, tmp, elem_size, f_lt, extra);
|
bool ok = merge(a, a_end, b, b_end, tmp, elem_size, f_lt, extra);
|
||||||
if(!ok) {
|
if(!ok) {
|
||||||
free(tmp);
|
free(tmp);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user