#include <stdio.h>
#include <stdlib.h>
/* Puzzle D41 -- swap the top half of an array with the bottom half
|
| Within each half, keep the elements in their original order.
| If the array has an odd number of elements, the middle element
| remains where it is.
*/
void swapHalves( int size, int arr[] )
{
int j, temp;
int startTop = size/2+size%2 ; /* start of the top half */
for ( j=0; j<size/2; j++ )
{
temp = arr[j];
arr[j] = arr[startTop+j];
arr[size/2+size%2+j] = temp;
}
}
void fillArrayInOrder( int size, int arr[] )
{
int j;
for ( j=0; j<size; j++ )
{
arr[j] = j;
}
}
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 main()
{
const int SIZE = 19;
int x[ SIZE ];
printf("Original:\n");
fillArrayInOrder( SIZE, x );
printArray( SIZE, x );
printf("\nSwap Halves: \n");
swapHalves( SIZE, x );
printArray( SIZE, x );
printf("\n\n");
return 0;
}
Here is a somewhat more convenient version (which will not compile on some compilers):
#include <stdio.h>
#include <stdlib.h>
/* Puzzle D41 -- swap the top half of an array with the bottom half
|
| Within each half, keep the elements in their original order.
| If the array has an odd number of elements, the middle element
| remains where it is.
*/
void swapHalves( int size, int arr[] )
{
int j, temp;
int startTop = size/2+size%2 ; /* start of the top half */
for ( j=0; j<size/2; j++ )
{
temp = arr[j];
arr[j] = arr[startTop+j];
arr[size/2+size%2+j] = temp;
}
}
void fillArrayInOrder( int size, int arr[] )
{
int j;
for ( j=0; j<size; j++ )
{
arr[j] = j;
}
}
void printArray( int size, int arr[] )
{
const int N = 25;
int j;
for ( j=0; j<size; j++ )
{
if ( j%N == N-1 )
printf("%4d\n", arr[j] );
else
printf("%4d ", arr[j] );
}
}
void tester( int arSize )
{
int x[ arSize ];
printf("Original:\n");
fillArrayInOrder( arSize , x );
printArray( arSize , x );
printf("\nSwap Halves: \n");
swapHalves( arSize , x );
printArray( arSize , x );
printf("\n");
}
int main()
{
int size;
printf("Array Size: ");
scanf("%d", &size );
tester( size );
return 0;
}