summaryrefslogtreecommitdiff
path: root/reference/C/EXAMPLES/qsort1.c
blob: b078ab4067185ba64f2e6b0c4256a90deb4aabd7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/************************************************************************
 *
 * Purpose: To sort numbers held in an array.
 * Author:  M.J.Leslie
 * Date:    30-Nov-94
 *
 ************************************************************************/

/********** Preprocessor  ***********************************************/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/********** Functions ***************************************************/

void display_nums(int *, int);
int comp_nums(const int *, const int *);

/********** main ********************************************************/

main()
{
  int numbers[]=			/* Numbers to be sorted.	*/
  {43,76,23,1,100,56,23,99,33,654};

  int how_many=10;			/* Number of numbers entered	*/


  puts("\nThese are the unsorted numbers\n");
  display_nums(numbers, how_many);

					/* SORT the numbers held in 
					 * 'numbers'.			*/
  qsort(
        numbers, 			/* Pointer to elements		*/
        how_many, 			/* Number of elements		*/
        sizeof(int),  			/* size of one element.		*/
        (void *)comp_nums		/* Pointer to comparison function */
       );

  puts("\nThese are the sorted numbers\n");
  display_nums(numbers, how_many);
}

/************************************************************************
 *
 * comp_nums: Compare two numbers.
 *
 ************************************************************************/

int comp_nums(const int *num1, const int *num2)
{
  if (*num1 <  *num2) return -1;
  if (*num1 == *num2) return  0;
  if (*num1 >  *num2) return  1;
}

/************************************************************************
 *
 * display_nums: Display the numbers
 *
 ************************************************************************/

void display_nums(int *array, int count)
{
					/* Print all the elements in 
					 * the array.               	*/
  while ( count-- )
  {
    printf("%d ",*array);
    array++;
  }
  puts("");
}

/******* The Results ****************************************************
 *
 *	These are the unsorted numbers
 *	
 *	43 76 23 1 100 56 23 99 33 654 
 *	
 *	These are the sorted numbers
 *	
 *	1 23 23 33 43 56 76 99 100 654 
 *
 ************************************************************************/