Answer DE49

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

/* Puzzle D49 -- selection sort
|
*/
int selectionSort( int size, int arr[] )
{
  int pass, j;
  int min, minj;
 
  /* Each pass finds the correct value to put in arr[pass] */
  for ( pass=0; pass<size-1; pass++ )
  {
    /* find the smallest remaining element in */
    /* arr[pass]... arr[size-1] */
    minj = pass;
    min  = arr[minj];
    for ( j=pass+1; j<size; j++ )
    {
      if ( arr[j] < min )
      {
        min = arr[j];
        minj = j;
      }
    }
    
    /* swap the smallest remaining element */
    /* with the element in arr[pass] */
    arr[minj] = arr[pass];
    arr[pass] = min;
  }
}

int inOrder( int size, int arr[] )
{
  int j, count=0 ;

  for ( j=0; j<size-1; j++ )
  {
    if ( arr[j] > arr[j+1] ) count++ ;
  }

  return count;
}

void printArray( int size, int arr[] )
{
  const int N = 10;
  int j;
  
  for ( j=0; j<size; j++ )
  {
    if ( j%N == N-1 )
      printf("%4d\n", arr[j] );
    else
      printf("%4d ", arr[j] );    
  }
}

int randInt( int min, int max )
{
  return (rand()*(max-min+1))/(RAND_MAX+1) + min ;
}

void fillArrayRandom( int size, int arr[], int low, int high )
{
  int j;
  for ( j=0; j<size; j++ )
    arr[j] = randInt( low, high );
}

int main()
{
  const int SIZE = 50;
  int x[SIZE] ;
  int num;
  
  srand( time(0) );
  fillArrayRandom( SIZE, x, 0, 100 );
  printArray( SIZE, x );
  num = inOrder( SIZE, x );
  if ( num>0 )
    printf("%d elements out of order.\n", num ) ;
  else
    printf("All elements are in order.\n");
  printf("\n\n");

  selectionSort( SIZE, x );
  printArray( SIZE, x );

  num = inOrder( SIZE, x );
  if ( num>0 )
    printf("%d elements out of order.\n", num ) ;
  else
    printf("All elements are in order.\n");
    
  printf("\n\n");
  return 0;
}


Back to Puzzle Home