# Thread: Selection Sort in C

1. ## Selection Sort in C

Hello Everyone, Can anyone suggest me tutorial of selection sort where I can check the implementation code to selection sort in C?

selection sort in c - Google Search

Third hit for me looks OK:

Selection sort in C | Programming Simplified

3. Code:
```#include <stdio.h>

#define ub(x) sizeof(x)/sizeof(x[0])

int arr[] = { 64, 25, 12, 4, 101, 22, 11 };
int smallest = 0, selection = 0;

void getSmallest() {
smallest = 0;
for (int y=0; y<ub(arr); y++) {
if (arr[y] < smallest || smallest == 0) {
if (arr[y] != 0) {
smallest = arr[y];
selection = y;
}
}
}
printf( "%i,", smallest );
}

int main( int argc, char *argv[] ) {

for (int i=0; i<ub(arr); i++) {
getSmallest();
arr[selection] = 0;
}

printf( "\n" );
return 0;
}```

4. Selection sort... walk through the first element to the last but one (i). Inside that loop, walk to the second element to the last (j). Compare element at position i to the element at position j. If your criteria is "less than", then if element j is "less than" element i, swap them. That's it.

Code:
```void selectionSort(
void *ptr,   // pointer to array
size_t nelems, // num of elements in array
size_t size,   // size of each element
int (*criteria)(void *, void *) // sorting criteria.
)
{
size_t i, j;
void *tmp = malloc( size );

for ( i = 0; i < nelems - 1; i++ )
for ( j = 1; j < nelems; j++ )
if ( criteria( ptr + i*size, ptr + j*size ) > 0 )
{
memcpy( tmp, ptr + i*size, size );
memcpy( ptr+i*size, ptr+j*size, size );
memcpy( ptr+j*size, tmp, size );
}

free( tmp );
}```
criteria is pointer to a function which returns -1, 0 or 1 (if 1, swap is made).

PS: void pointers (by ISO) behave as if they were char pointers, with pointer arithmetic.

Usage:
Code:
```int a[] = { 1, 10, 3, 4, -1, -13, 7 };

int criteria( void *a, void *b )
{ return (*(int *)a > *(int *)b) - (*(int *)a < *(int *)b); }

...
selectionSort( a, sizeof a/sizeof a[0], sizeof a[0], criteria );```

5. Code:
```#include <stdio.h>

#define ub(x) sizeof(x)/sizeof(x[0])

void selectionsort( int array[], int arraySize ) {

for (int j=0; j<arraySize; j++) {

int smallest = 0, selection = 0;
int tmpBase = array[j];

for (int i=j; i<arraySize; i++) {
if (smallest == 0 || smallest > array[i]) {
smallest = array[i]; selection = i;
}
}

array[j] = array[selection];
array[selection] = tmpBase;

}

}

int main( int argc, char *argv[] ) {

int arr[] = { 64, 25, 12, 4, 101, 22, 11 };
selectionsort( arr, ub(arr) );

for (int i=0; i<ub(arr); i++) {
printf( "%i,", arr[i] );
}

printf( "\n" );
return 0;
}```

6. Thanks for providing a sample. I have checked this on <<spam site removed>>