/ src / commonlib / sort.c
sort.c
 1  /* SPDX-License-Identifier: GPL-2.0-only */
 2  
 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. */
 8  void bubblesort(int *v, size_t num_entries, sort_order_t order)
 9  {
10  	size_t i, j;
11  	int swapped;
12  
13  	/* Make sure there are at least two entries to sort. */
14  	if (num_entries < 2)
15  		return;
16  
17  	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  }