home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v1.zip / IBMCPP / SAMPLES / COMPILER / SAMPLE03 / SAMPLE03.C < prev    next >
Text File  |  1993-03-15  |  4KB  |  120 lines

  1. /****************************************************************************/
  2. /*                                                                          */
  3. /* Sample Program 03 : SAMPLE03.C                                           */
  4. /*                                                                          */
  5. /* COPYRIGHT:                                                               */
  6. /* ----------                                                               */
  7. /* Copyright (C) International Business Machines Corp., 1991, 1993.         */
  8. /*                                                                          */
  9. /* DISCLAIMER OF WARRANTIES:                                                */
  10. /* -------------------------                                                */
  11. /* The following [enclosed] code is sample code created by IBM              */
  12. /* Corporation.  This sample code is not part of any standard IBM product   */
  13. /* and is provided to you solely for the purpose of assisting you in the    */
  14. /* development of your applications.  The code is provided "AS IS",         */
  15. /* without warranty of any kind.  IBM shall not be liable for any damages   */
  16. /* arising out of your use of the sample code, even if they have been       */
  17. /* advised of the possibility of such damages.                              */
  18. /*                                                                          */
  19. /****************************************************************************/
  20.  
  21. #include <stdio.h>
  22. #include "sample03.h"
  23. #pragma export(selection,,1)
  24. size_t nSwaps;
  25. size_t nCompares;
  26.  
  27. /* Swap two integers.                                                       */
  28.  
  29. static void swap(int *x, int *y)
  30. {
  31.    int temp;
  32.    temp = *x;
  33.    *x = *y;
  34.    *y = temp;
  35.    ++nSwaps;
  36.    return ;
  37. }
  38.  
  39. /* Compare two integers.                                                    */
  40.  
  41. static int compare(int x, int y)
  42. {
  43.    ++nCompares;
  44.    return (x-y);
  45. }
  46.  
  47. /* Use Bubble Sort to sort an array of integers in increasing order.        */
  48.  
  49. void bubble(int array[], size_t nNumElements)
  50. {
  51.    size_t i,j;                         /* array indices                     */
  52.    nSwaps = nCompares = 0;
  53.    for (i = 0; i < nNumElements-1; ++i) {
  54.       for (j = nNumElements-1; j > i; --j) {
  55.          if (compare(array[j], array[j-1]) < 0)
  56.             swap(&array[j], &array[j-1]);
  57.       }
  58.    }
  59.    return ;
  60. }
  61. #ifdef   STATIC_LINK
  62. #pragma  handler(      bubble )
  63. #endif
  64.  
  65. /* Use Insertion Sort to sort an array of integers in increasing order.     */
  66.  
  67. void insertion(int array[], size_t nNumElements)
  68. {
  69.    size_t i,j;                         /* array indices                     */
  70.    nSwaps = nCompares = 0;
  71.    for (i = 1; i < nNumElements; ++i) {
  72.       for (j = i; j && (compare(array[j], array[j-1]) < 0); --j)
  73.          swap(&array[j], &array[j-1]);
  74.    }
  75.    return ;
  76. }
  77. #ifdef   STATIC_LINK
  78. #pragma  handler(      insertion )
  79. #endif
  80.  
  81. /* Use Selection Sort to sort an array of integers in increasing order.     */
  82.  
  83. void selection(int array[], size_t nNumElements)
  84. {
  85.    size_t i,j,lowindex;                /* array indices                     */
  86.    int lowkey;                         /* temporary storage for lowest key
  87.                                           value                             */
  88.    nSwaps = nCompares = 0;
  89.    for (i = 0; i < nNumElements-1; ++i) {
  90.       lowindex = i;
  91.       lowkey = array[i];
  92.       for (j = i+1; j < nNumElements; ++j) {
  93.          if (compare(array[j], lowkey) < 0) {
  94.             lowkey = array[j];
  95.             lowindex = j;
  96.          }
  97.       }
  98.       if (lowindex != i)
  99.          swap(&array[i], &array[lowindex]);
  100.    }
  101.    return ;
  102. }
  103. #ifdef   STATIC_LINK
  104. #pragma  handler(      selection )
  105. #endif
  106.  
  107. /* List the integers in an arrary.                                          */
  108.  
  109. void list(int array[], size_t nNumElements)
  110. {
  111.    size_t i;
  112.    for (i = 0; i < nNumElements; ++i)
  113.       printf("%i ", array[i]);
  114.    putchar('\n');
  115.    return ;
  116. }
  117. #ifdef   STATIC_LINK
  118. #pragma  handler(      list )
  119. #endif
  120.