31 #ifndef ACE_SORTING_COMB_SORT_H
32 #define ACE_SORTING_COMB_SORT_H
36 #if ! defined(ACE_SORTING_DIRECT_COMB_SORT)
43 #define ACE_SORTING_DIRECT_COMB_SORT 0
46 namespace ace_sorting {
59 #if ACE_SORTING_DIRECT_COMB_SORT
61 void combSort13(T data[], uint16_t n) {
65 while (swapped || gap > 1) {
67 if (gap == 0) gap = 1;
72 for (i = 0, j = gap; j < n; i++, j++) {
73 if (data[j] < data[i]) {
74 swap(data[i], data[j]);
85 auto&& lessThan = [](
const T& a,
const T& b) ->
bool {
return a < b; };
97 template <
typename T,
typename F>
102 while (swapped || gap > 1) {
104 if (gap == 0) gap = 1;
109 for (i = 0, j = gap; j < n; i++, j++) {
110 if (lessThan(data[j], data[i])) {
111 swap(data[i], data[j]);
132 #if ACE_SORTING_DIRECT_COMB_SORT
133 template <
typename T>
134 void combSort13m(T data[], uint16_t n) {
138 while (swapped || gap > 1) {
140 if (gap == 9 || gap == 10) {
142 }
else if (gap == 0) {
149 for (i = 0, j = gap; j < n; i++, j++) {
150 if (data[j] < data[i]) {
151 swap(data[i], data[j]);
158 template <
typename T>
162 auto&& lessThan = [](
const T& a,
const T& b) ->
bool {
return a < b; };
174 template <
typename T,
typename F>
179 while (swapped || gap > 1) {
181 if (gap == 9 || gap == 10) {
183 }
else if (gap == 0) {
190 for (i = 0, j = gap; j < n; i++, j++) {
191 if (lessThan(data[j], data[i])) {
192 swap(data[i], data[j]);
224 #if ACE_SORTING_DIRECT_COMB_SORT
225 template <
typename T>
226 void combSort133(T data[], uint16_t n) {
230 while (swapped || gap > 1) {
232 if (gap == 0) gap = 1;
237 for (i = 0, j = gap; j < n; i++, j++) {
238 if (data[j] < data[i]) {
239 swap(data[i], data[j]);
246 template <
typename T>
250 auto&& lessThan = [](
const T& a,
const T& b) ->
bool {
return a < b; };
262 template <
typename T,
typename F>
267 while (swapped || gap > 1) {
269 if (gap == 0) gap = 1;
274 for (i = 0, j = gap; j < n; i++, j++) {
275 if (lessThan(data[j], data[i])) {
276 swap(data[i], data[j]);
296 #if ACE_SORTING_DIRECT_COMB_SORT
297 template <
typename T>
298 void combSort133m(T data[], uint16_t n) {
302 while (swapped || gap > 1) {
304 if (gap == 9 || gap == 10) {
306 }
else if (gap == 0) {
313 for (i = 0, j = gap; j < n; i++, j++) {
314 if (data[j] < data[i]) {
315 swap(data[i], data[j]);
322 template <
typename T>
326 auto&& lessThan = [](
const T& a,
const T& b) ->
bool {
return a < b; };
338 template <
typename T,
typename F>
343 while (swapped || gap > 1) {
345 if (gap == 9 || gap == 10) {
347 }
else if (gap == 0) {
354 for (i = 0, j = gap; j < n; i++, j++) {
355 if (lessThan(data[j], data[i])) {
356 swap(data[i], data[j]);