📄 exer5.cpp
字号:
// exer5.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "malloc.h"
#include "memory.h"
#include "stdlib.h"
#include "time.h"
#include "stdio.h"
typedef struct {
unsigned short A; //百位
unsigned short B; //十位
unsigned short C; //个位
}Digital_t;
typedef struct {
Digital_t DigInfo;
unsigned short Data; //数据
unsigned short Key;
}Hundred_t;
#define Divide(pData) \
(pData)->DigInfo.A = (pData)->Data / 100; \
(pData)->DigInfo.B = ((pData)->Data - (pData)->DigInfo.A * 100) / 10; \
(pData)->DigInfo.C = (pData)->Data - ((pData)->DigInfo.A * 100) - ((pData)->DigInfo.B *10);
// Function Declaration
int DigitalSort(Hundred_t *pDataList, int num);
int sort(Hundred_t *pDataList, int num);
int output(Hundred_t *pDataList, int iDataNum );
int main(int argc, char* argv[])
{
int iDataNum, iDataSize;
int i;
long seed;
Hundred_t *pDataList = NULL;
printf("Please input number of input Data :\n");
scanf("%d", &iDataNum);
iDataSize = sizeof(Hundred_t) * iDataNum;
pDataList = (Hundred_t *) malloc(iDataSize);
if (pDataList ==NULL) {
return -1;
}
memset((void *)pDataList, 0, iDataSize);
//printf("Please input Data1.Data2.... :\n");
// input
srand((unsigned) time(&seed));
for (i = 0; i < iDataNum; i++)
{
//scanf("%d", &((pDataList + i)->Data));
(pDataList + i)->Data = rand()/100;
}
// sort
DigitalSort(pDataList, iDataNum);
// output
output(pDataList,iDataNum);
free(pDataList);
getchar();
return 0;
}
// sort function
int DigitalSort(Hundred_t *pDataList, int num)
{
int i;
// divide digital
for ( i= 0; i <num; i++)
{
Divide(pDataList+i);
}
//个位
for ( i= 0; i <num; i++)
{
(pDataList+i)->Key = (pDataList+i)->DigInfo.C;
}
sort(pDataList, num);
// output(pDataList,num);
//十位
for ( i= 0; i <num; i++)
{
(pDataList+i)->Key = (pDataList+i)->DigInfo.B;
}
sort(pDataList, num);
// output(pDataList,num);
//百位
for ( i= 0; i <num; i++)
{
(pDataList+i)->Key = (pDataList+i)->DigInfo.A;
}
sort(pDataList, num);
// output(pDataList,num);
return 0;
}
int sort(Hundred_t *pDataList, int num)
{
int i,j;
Hundred_t PD;
for (i=0; i<num-1; i++)
{
for (j=0; j<num-1-i; j++)
{
if ((pDataList+j)->Key > (pDataList+j+1)->Key)
{
PD = *(pDataList + j);
*(pDataList + j) = *(pDataList + j +1);
*(pDataList + j +1) = PD;
}
}
}
return 0;
}
int output(Hundred_t *pDataList, int iDataNum )
{
int i;
for (i = 0; i < iDataNum; i++)
{
printf("%d ", (pDataList + i)->Data);
}
printf("\n");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -