/** * Copyright © 2016-2019 Xavier G. <xavier@kindwolf.org> * This work is free. You can redistribute it and/or modify it under the * terms of the Do What The Fuck You Want To Public License, Version 2, * as published by Sam Hocevar. See the COPYING file for more details. */ void array_sort(unsigned int **array, unsigned int count); #define ARRAY_SORT 1 #include "common.c" /* * Implementation of selection sort: */ void array_sort(unsigned int **array, unsigned int count) { unsigned int *src; /* Unsorted, source array. */ unsigned int i, j; /* Indices. */ unsigned int smallest_value; /* Smallest value in the unsorted sublist. */ unsigned int smallest_index; /* Index of the smallest value in the unsorted sublist. */ /* Do nothing unless there are at least two items to sort: */ if (count < 2) return; /* Selection-sort is an in-place algorithm, i.e. we work directly on the provided array: */ src = *array; for (i = 0; i < count - 1; ++ i) { /* Find the smallest element in the unsorted sublist: */ smallest_value = src[i]; smallest_index = i; for (j = i + 1; j < count; ++ j) { if (src[j] < smallest_value) { smallest_value = src[j]; smallest_index = j; } } /* Exchange it with the leftmost unsorted element: */ if (smallest_index != i) { src[smallest_index] = src[i]; src[i] = smallest_value; } /* Move the sublist boundaries one element to the right: */ /* (this is done by "++ i" in the for loop) */ } }