Order by pair comparisons: Difference between revisions

(→‎{{header|C++}}: add c++ way using standard sort)
Line 28:
* A routine that does not ask the user "too many" comparison questions should be used.
<br><br>
 
=={{header|C}}==
Using qsort; not very efficient
<lang c>#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int interactiveCompare(const void *x1, const void *x2)
{
const char *s1 = *(const char * const *)x1;
const char *s2 = *(const char * const *)x2;
static int count = 0;
printf("(%d) Is %s <, ==, or > %s? Answer -1, 0, or 1: ", ++count, s1, s2);
int response;
scanf("%d", &response);
return response;
}
 
void printOrder(const char *items[], int len)
{
printf("{ ");
for (int i = 0; i < len; ++i) printf("%s ", items[i]);
printf("}\n");
}
 
int main(void)
{
const char *items[] =
{
"violet", "red", "green", "indigo", "blue", "yellow", "orange"
};
 
qsort(items, sizeof(items)/sizeof(*items), sizeof(*items), interactiveCompare);
printOrder(items, sizeof(items)/sizeof(*items));
return 0;
}</lang>
{{out}}
<pre>
(1) Is violet <, ==, or > red? Answer -1, 0, or 1: 1
(2) Is violet <, ==, or > green? Answer -1, 0, or 1: 1
(3) Is red <, ==, or > green? Answer -1, 0, or 1: -1
(4) Is violet <, ==, or > indigo? Answer -1, 0, or 1: 1
(5) Is green <, ==, or > indigo? Answer -1, 0, or 1: -1
(6) Is violet <, ==, or > blue? Answer -1, 0, or 1: 1
(7) Is indigo <, ==, or > blue? Answer -1, 0, or 1: 1
(8) Is green <, ==, or > blue? Answer -1, 0, or 1: -1
(9) Is violet <, ==, or > yellow? Answer -1, 0, or 1: 1
(10) Is indigo <, ==, or > yellow? Answer -1, 0, or 1: 1
(11) Is blue <, ==, or > yellow? Answer -1, 0, or 1: 1
(12) Is green <, ==, or > yellow? Answer -1, 0, or 1: 1
(13) Is red <, ==, or > yellow? Answer -1, 0, or 1: -1
(14) Is violet <, ==, or > orange? Answer -1, 0, or 1: 1
(15) Is indigo <, ==, or > orange? Answer -1, 0, or 1: 1
(16) Is blue <, ==, or > orange? Answer -1, 0, or 1: 1
(17) Is green <, ==, or > orange? Answer -1, 0, or 1: 1
(18) Is yellow <, ==, or > orange? Answer -1, 0, or 1: 1
(19) Is red <, ==, or > orange? Answer -1, 0, or 1: -1
{ red orange yellow green blue indigo violet }
</pre>
 
=={{header|C++}}==
Anonymous user