#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*
* Implemented by Arjun Sunel.
*/
// enumeration denoting sort type
enum CompareDataType
{
cmpStringType = 1,
cmpIntType = 2
};
// Employee structure
struct Employee
{
char *name;
int age;
};
// Method to swap two structures by reference.
void Swap(struct Employee *first, struct Employee *second)
{
struct Employee temp = *first;
*first = *second;
*second = temp;
}
int IsLessThan(struct Employee *first, struct Employee* second, enum CompareDataType cmpType)
{
int res = 0;
switch (cmpType)
{
case cmpStringType:
res = strcmp(first->name, second->name);
break;
case cmpIntType:
res = first->age < second->age ? -1 : (second->age < first->age);
break;
default:
fprintf(stderr, "Invalid sort comparison type\n");
exit(EXIT_FAILURE);
}
return res;
}
// Insertion Sort Method
void InsertionSort(struct Employee array[], int size, enum CompareDataType cmpType)
{
int i, j;
struct Employee curElement;
for(i = 1; i < size; i++)
{
curElement = array[i];
j = i - 1;
while(j >=0 && (IsLessThan(array+j, &curElement, cmpType) > 0))
{
Swap(&array[j+1], &array[j]);
j--;
}
array[j+1] = curElement;
}
}
// Entry point of the program
int main()
{
struct Employee array[] = {{"John", 45}, {"Mary", 23}, {"Celina", 79}, {"Mike", 41}};
int arraySize = 4;
int index;
printf("Before Sorting : \n");
for(index = 0; index < arraySize; index++)
{
printf("(%s, %d) ", array[index].name, array[index].age);
}
printf("\n");
InsertionSort(array, arraySize, cmpStringType);
printf("After Sorting by name : \n");
for(index = 0; index < arraySize; index++)
printf("(%s, %d) ", array[index].name, array[index].age);
printf("\n");
InsertionSort(array, arraySize, cmpIntType);
printf("After Sorting by age : \n");
for(index = 0; index < arraySize; index++)
printf("(%s, %d) ", array[index].name, array[index].age);
printf("\n");
return 0;
}
Sunday, 14 December 2014
Iterative InsertionSort for Array of Structures
Labels:
Sorting
Subscribe to:
Post Comments (Atom)

No comments:
Post a Comment