blob: 6fd1a40549122a06e88344de13068be53b86b4a1 [file] [log] [blame]
Angel Ponsebda03e2020-04-02 23:48:05 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Werner Zehbd660e22019-02-19 13:34:12 +01002
3#include <commonlib/helpers.h>
4#include <commonlib/sort.h>
5
6/* Implement a simple Bubble sort algorithm. Reduce the needed number of
7 iterations by taking care of already sorted entries in the list. */
8void bubblesort(int *v, size_t num_entries, sort_order_t order)
9{
10 size_t i, j;
11 int swapped;
12
Werner Zeh1115f632019-03-12 07:11:11 +010013 /* Make sure there are at least two entries to sort. */
14 if (num_entries < 2)
15 return;
16
Werner Zehbd660e22019-02-19 13:34:12 +010017 for (j = 0; j < num_entries - 1; j++) {
18 swapped = 0;
19 for (i = 0; i < num_entries - j - 1; i++) {
20 switch (order) {
21 case NUM_ASCENDING:
22 if (v[i] > v[i + 1]) {
23 SWAP(v[i], v[i + 1]);
24 swapped = 1;
25 }
26 break;
27 case NUM_DESCENDING:
28 if (v[i] < v[i + 1]) {
29 SWAP(v[i], v[i + 1]);
30 swapped = 1;
31 }
32 break;
33 default:
34 return;
35 }
36 }
37 if (!swapped)
38 break;
39 }
40}