Code:
#include <stdio.h>
#include <string.h>
#define NUM_STU 5
typedef struct
{
char name[26];
int midterm[3];
int final;
}STUDENT;
void insertionSort (STUDENT list[], int last);
int main()
{
STUDENT stuAry[NUM_STU] =
{
{"Charles, George", {85, 94, 79}, 93},
{"Adams, Karin", {75, 91, 89}, 89},
{"Nguyen, Tuan", {87, 88, 89}, 90},
{"Oh, Bill", {76, 96, 88}, 91},
{"Chavez, Maria", {83, 79, 94}, 91},
}; //stuAry
printf("Unsorted data:\n");
for (STUDENT* pStuPtr = stuAry; pStuPtr <stuAry + NUM_STU; pStuPtr++)
printf("%-26s %4d %4d %4d %4d\n", pStuPtr->name, pStuPtr->midterm[0],pStuPtr->midterm[1],pStuPtr->midterm[2], pStuPtr->final);
printf("\n");
insertionSort(stuAry, NUM_STU - 1);
printf("Sorted data:\n");
for (STUDENT* pStuPtr = stuAry; pStuPtr < stuAry + NUM_STU; pStuPtr++)
printf("%-26s %4d %4d %4d %4d\n", pStuPtr->name, pStuPtr->midterm[0], pStuPtr->midterm[1], pStuPtr->midterm[2], pStuPtr->final);
return 0;
}
void insertionSort(STUDENT list[], int last)
{
bool located;
STUDENT temp;
STUDENT* pCurrent;
STUDENT* pWalker;
STUDENT* pLast;
for (pCurrent = list + 1, pLast = list + last; pCurrent <= pLast; pCurrent++)
{
located = false;
temp = *pCurrent;
for (pWalker = pCurrent - 1; pWalker >= list && !located;)
if (strcmp(temp.name, pWalker->name) < 0)
{
*(pWalker + 1) = *pWalker;
pWalker--;
}
else
located = true;
*(pWalker + 1) = temp;
}
return;
}