Files
system76-coreboot/src/commonlib/sort.c
Werner Zeh 1115f631dc commonlib/bubblesort: Do not try to sort less than two entries
Before start sorting check for the number of entries in the data set. If
there are less than two entries, sorting makes no sense.

Change-Id: Ib9d5522cdebb6559a025217f7faf318589d55a2c
Signed-off-by: Werner Zeh <werner.zeh@siemens.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/31854
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
2019-03-14 07:48:06 +00:00

54 lines
1.3 KiB
C

/*
* This file is part of the coreboot project.
*
* Copyright (C) 2019 Siemens AG
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <commonlib/helpers.h>
#include <commonlib/sort.h>
/* Implement a simple Bubble sort algorithm. Reduce the needed number of
iterations by taking care of already sorted entries in the list. */
void bubblesort(int *v, size_t num_entries, sort_order_t order)
{
size_t i, j;
int swapped;
/* Make sure there are at least two entries to sort. */
if (num_entries < 2)
return;
for (j = 0; j < num_entries - 1; j++) {
swapped = 0;
for (i = 0; i < num_entries - j - 1; i++) {
switch (order) {
case NUM_ASCENDING:
if (v[i] > v[i + 1]) {
SWAP(v[i], v[i + 1]);
swapped = 1;
}
break;
case NUM_DESCENDING:
if (v[i] < v[i + 1]) {
SWAP(v[i], v[i + 1]);
swapped = 1;
}
break;
default:
return;
}
}
if (!swapped)
break;
}
}