结构数组选择排序

来源:互联网 发布:知乎如何添加图片 编辑:程序博客网 时间:2024/05/21 23:38


/// @file exam_1_6.c/// @brief /**exam_1_6 *从键盘输入5个用户的数据,包括:姓名和电话号码要求按姓名排序后,输出用户的全部数据。*/#include <windows.h>#include <stdlib.h>#include <stdio.h>#include <crtdbg.h>#include <conio.h>typedef struct _tag_userInfo{    char cName[31];    char cTelSn[20];}TAG_USERINFO;void fnInputUserDataAndParse();void fnInputUserData(TAG_USERINFO* pInfo, int iPos);void fnSortUserData(TAG_USERINFO* pInfoAry, size_t nSizeAry);void fnPrintUserData(TAG_USERINFO* pInfo, int iPos);int main(int argc, char *argv[ ], char *envp[ ]){    fnInputUserDataAndParse();    printf("END, press any key to quit\n");    getchar();        return 0;}void fnInputUserDataAndParse(){    int i = 0;    TAG_USERINFO userData[5];    for (i = 0; i < sizeof(userData) / sizeof(TAG_USERINFO); i++)    {        fnInputUserData(&userData[i], i);    }    fnSortUserData(userData, sizeof(userData) / sizeof(TAG_USERINFO));    printf("after sort:\n");    for (i = 0; i < sizeof(userData) / sizeof(TAG_USERINFO); i++)    {        fnPrintUserData(&userData[i], i);    }}void fnInputUserData(TAG_USERINFO* pInfo, int iPos){    printf("please input user No.%d's Name:", iPos);    scanf("%30s", pInfo->cName); ///< safe input    fflush(stdin);    printf("please input user No.%d's telSn:", iPos);    scanf("%19s", pInfo->cTelSn); ///< safe input    fflush(stdin);    printf("\n");}void fnSortUserData(TAG_USERINFO* pInfoAry, size_t nSizeAry){    size_t n1 = 0;    size_t n2 = 0;    size_t nIndexMax = 0;    int iResult = 0;    TAG_USERINFO TmpInfo;    for (n1 = 0; n1 < nSizeAry - 1; n1++)    {        nIndexMax = n1;        for (n2 = n1 + 1; n2 < nSizeAry; n2++)        {            iResult = strcmp(                ((TAG_USERINFO*)(pInfoAry + n1))->cName,                 ((TAG_USERINFO*)(pInfoAry + n2))->cName);            if (iResult < 0)            {                nIndexMax = n2;            }        }        if (nIndexMax != n1)        {            memcpy(&TmpInfo, (pInfoAry + n1), sizeof(TAG_USERINFO));            memcpy((pInfoAry + n1), (pInfoAry + nIndexMax), sizeof(TAG_USERINFO));            memcpy((pInfoAry + nIndexMax), &TmpInfo, sizeof(TAG_USERINFO));        }    }}void fnPrintUserData(TAG_USERINFO* pInfo, int iPos){    _ASSERT(NULL != pInfo);    printf("user No.%d's Name: %s\n", iPos, pInfo->cName);    printf("user No.%d's telSn: %s\n", iPos, pInfo->cTelSn);        printf("\n");}


0 0
原创粉丝点击