The main error is that in step i you should find the minimum of the elements i ... N-1 and switch places with arr[i]. So shouldn't it be
for(int i = 0; i < size; i++)
{
loc = find_min(arr+i, size - i);
exchange(arr[loc], arr[i]);
}
A more cosmetic problem is that you do one superfluous compare in your find_min function:
int find_min(int arr[], int size)
{
int index = 0;
for(int k = 0; k < size; k++)
{
if( arr[index] > arr[k])
In the first iteration you are comparing arr[0] with arr[0]. So why don't you start the loop with k = 1:
int find_min(int arr[], int size)
{
int index = 0;
for(int k = 1; k < size; k++)
{
if( arr[index] > arr[k])