33
44#include " Arduino.h"
55
6+ /* *** These are the functions you can use ****/
7+
68// Sort an array
79template <typename AnyType> void sortArray (AnyType array[], size_t sizeOfArray);
810
@@ -15,40 +17,46 @@ template<typename AnyType> void sortArray(AnyType array[], size_t sizeOfArray, b
1517// Sort in reverse with custom comparison function
1618template <typename AnyType> void sortArrayReverse (AnyType array[], size_t sizeOfArray, bool (*largerThan)(AnyType, AnyType));
1719
18- /* *** Implementation below ****/
1920
20- #define SWAP (x, y, T ) do { T SWAP = x; x = y; y = SWAP; } while (0 )
2121
22- template <typename AnyType> bool builtinLargerThan (AnyType first, AnyType second) {
23- return first > second;
24- }
2522
26- template <> bool builtinLargerThan (char * first, char * second) {
27- return strcmp (first, second) > 0 ;
28- }
2923
30- template <typename AnyType> void insertionSort (AnyType array[], size_t sizeOfArray, bool reverse, bool (*largerThan)(AnyType, AnyType)) {
31- for (size_t i = 1 ; i < sizeOfArray; i++) {
32- for (size_t j = i; j > 0 && (largerThan (array[j-1 ], array[j]) != reverse); j--) {
33- SWAP (array[j-1 ], array[j], AnyType);
34- }
35- }
24+ /* *** Implementation below. Do not use below functions ****/
25+
26+ namespace ArduinoSort {
27+ template <typename AnyType> bool builtinLargerThan (AnyType first, AnyType second) {
28+ return first > second;
29+ }
30+
31+ template <> bool builtinLargerThan (char * first, char * second) {
32+ return strcmp (first, second) > 0 ;
33+ }
34+
35+ template <typename AnyType> void insertionSort (AnyType array[], size_t sizeOfArray, bool reverse, bool (*largerThan)(AnyType, AnyType)) {
36+ for (size_t i = 1 ; i < sizeOfArray; i++) {
37+ for (size_t j = i; j > 0 && (largerThan (array[j-1 ], array[j]) != reverse); j--) {
38+ AnyType tmp = array[j-1 ];
39+ array[j-1 ] = array[j];
40+ array[j] = tmp;
41+ }
42+ }
43+ }
3644}
3745
3846template <typename AnyType> void sortArray (AnyType array[], size_t sizeOfArray) {
39- insertionSort (array, sizeOfArray, false , builtinLargerThan);
47+ ArduinoSort:: insertionSort (array, sizeOfArray, false , ArduinoSort:: builtinLargerThan);
4048}
4149
4250template <typename AnyType> void sortArrayReverse (AnyType array[], size_t sizeOfArray) {
43- insertionSort (array, sizeOfArray, true , builtinLargerThan);
51+ ArduinoSort:: insertionSort (array, sizeOfArray, true , ArduinoSort:: builtinLargerThan);
4452}
4553
4654template <typename AnyType> void sortArray (AnyType array[], size_t sizeOfArray, bool (*largerThan)(AnyType, AnyType)) {
47- insertionSort (array, sizeOfArray, false , largerThan);
55+ ArduinoSort:: insertionSort (array, sizeOfArray, false , largerThan);
4856}
4957
5058template <typename AnyType> void sortArrayReverse (AnyType array[], size_t sizeOfArray, bool (*largerThan)(AnyType, AnyType)) {
51- insertionSort (array, sizeOfArray, true , largerThan);
59+ ArduinoSort:: insertionSort (array, sizeOfArray, true , largerThan);
5260}
5361
5462
0 commit comments