C49Answer


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

/* Puzzle C49 -- selection sort
|
*/
int selectionSort( int arr[], int size )
{
  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 arr[], int size ) { int j, count=0 ; for ( j=0; j<size-1; j++ ) { if ( arr[j] > arr[j+1] ) count++ ; } return count; } void printArray( int arr[], int size ) { 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 arr[], int size, int low, int high ) { int j; for ( j=0; j<size; j++ ) arr[j] = randInt( low, high ); } int main(int argc, char *argv[]) { const int SIZE = 50; int x[SIZE] ; int num; srand( time(0) ); fillArrayRandom( x, SIZE, 0, 100 ); printArray( x, SIZE ); num = inOrder( x, SIZE ); if ( num>0 ) printf("%d elements out of order.\n", num ) ; else printf("All elements are in order.\n"); printf("\n\n"); selectionSort( x, SIZE ); printArray( x, SIZE ); num = inOrder( x, SIZE ); if ( num>0 ) printf("%d elements out of order.\n", num ) ; else printf("All elements are in order.\n"); printf("\n\n"); system("PAUSE"); return 0; }