blob: 6b5da498edf9ca6625607a77c8b7546eb0fc112e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
// SPDX-FileCopyrightText: 2014-2024 Rafael G. Martins <rafael@rafaelmartins.eng.br>
// SPDX-License-Identifier: BSD-3-Clause
#include <stdbool.h>
#include "utils.h"
#include "sort.h"
bc_slist_t*
bc_slist_sort(bc_slist_t *l, bc_sort_func_t cmp)
{
if (l == NULL) {
return NULL;
}
bool swapped = false;
bc_slist_t *lptr = NULL;
bc_slist_t *rptr = NULL;
do {
swapped = false;
lptr = l;
while (lptr->next != rptr) {
if (0 < cmp(lptr->data, lptr->next->data)) {
void *tmp = lptr->data;
lptr->data = lptr->next->data;
lptr->next->data = tmp;
swapped = true;
}
lptr = lptr->next;
}
rptr = lptr;
} while(swapped);
return l;
}
|