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;
}