简单泛型排序

最近看了些别人写的源代码,自己不妨就尝试模仿下比较规范的格式写个简单的泛型排序程序吧。(主要是为了尝试别人写代码的规范大笑


程序包括文件  main.c  init.c  run.c sort.h

sort.h

1 #ifndef SORT
  2 #define SORT
  3 
  4 #define FALSE -1
  5 #define TRUE 0
  6 
  7 #define INPUT_ERROR 10
  8 #define SORT_ERROR 11
  9 
 10 #define SORT               //用于扩展
 11 
 12 void *DataBase;            //用于申请空间
 13 
 14 int *IpDataBase;           //保存int
 15 float *FpDataBase;      //保存float
 16 double *DpDataBase; //保存double
 17 
 18 int iTotle;                        //数据个数
 19 int iType;                        //用户输入想排序的类型
 20 
 21 
 22 #endif //SORT

main.c

  1 #include<stdio.h>
  2 
  3 #include"sort.h"
  4 
  5 int main()
  6 {
  7     if(MY_InitProcess())      //模仿源代码中初始化哈
  8     {
  9         fprintf(stderr, "init failed at %d.\n", __LINE__);//用fprintf 可以保证输出在屏幕上    比如运行程序用了  "./a.out>1.txt" , 出错信息会在屏幕上输出
 10         return -1;
 11     }
 12     return 0;
 13 }

init.c

  1 #include<stdio.h>
  2 
  3 #include"sort.h"
  4 
  5 int SORT MY_InitProcess()              //define SORT      将SORT设为空 方便以后扩展
  6 {
  7     if(InitInput())                                 //模仿源代码中初始化哈   输入
  8     {
  9         fprintf(stderr, "init input failed at %d.\n", __LINE__);
 10         return FALSE;
 11     }
 12 
 13     if(SortRun())                               //模仿源代码中初始化哈  排序
 14     {
 15         fprintf(stderr, "init sort failed at %d.\n", __LINE__);
 16         return FALSE;
 17     }
 18 
 19     if(EndPrint())                                //模仿源代码中初始化哈  输出
 20     {
 21         fprintf(stderr, "init print failed at %d.\n", __LINE__);
 22         return FALSE;
 23     }
 24 
 25     return TRUE;
 26 }

run.c                                                    //主要实现排序的文件

1 #include<stdio.h>
  2 #include<malloc.h>
  3 
  4 #include"sort.h"
  5 
  6 void IntPrint(void)                          //int数据输入
  7 {
  8     int i;
  9     IpDataBase = DataBase;
 10     printf("inpit your data...\n");
 11     for(i=0; i<iTotle; i++)
 12     {
 13         scanf("%d", &IpDataBase[i]);
 14     }
 15 }
 16 
 17 void FloatPrint(void)                    //float数据输入
 18 {
 19     int i;
 20     FpDataBase = DataBase;
 21     printf("inpit your data...\n");
 22     for(i=0; i<iTotle; i++)
 23     {
 24         scanf("%f", &FpDataBase[i]);
 25     }
 26 }
 27 
 28 void DoublePrint(void)             //double数据输入
 29 {
 30     int i;
 31     DpDataBase = DataBase;
 32     printf("inpit your data...\n");
 33     for(i=0; i<iTotle; i++)
 34     {
 35         scanf("%lf", &DpDataBase[i]);
 36     }
 37 }
 38 
 39 int SORT InitInput(void)       
 40 {
 41     void (*PFUN)();                             //根据需要指向所需函数
 42     fprintf(stderr, "input your data type and number\n");
 43     fprintf(stderr, "1:int 2:float 3:double\n");
 44     scanf("%d%d", &iType,&iTotle);
 45 
 46     switch(iType)
 47     {
 48         case 1:
 49             if(NULL == (DataBase = malloc((iTotle + 1) * sizeof(int))))
 50                 return FALSE;
 51             PFUN = IntPrint;
 52             break;
 53         case 2:
 54             if(NULL == (DataBase = malloc((iTotle + 1) * sizeof(float))))
 55                 return FALSE;
 56             PFUN = FloatPrint;
 57             break;
 58         case 3:
 59             if(NULL == (DataBase = malloc((iTotle + 1) * sizeof(double))))
 60                 return FALSE;
 61             PFUN = DoublePrint;
 62             break;
                //default:
                //   fprintf(stderr, "init failed at %d.\n", __LINE__);   //之前忘了加default了, 每个switch最好要有
                //   break;                      
 63     }
 64 
 65     PFUN();
 66     return TRUE;
 67 }
 68 void SORT FloatSort(void)           //float数据插入排序
 69 {
 70     int i,j;
 71     float iKey;
 72 
 73     for(j=1; j<iTotle; j++)
 74     {
 75         iKey = FpDataBase[j];
 76 
 77         i = j-1;
 78         while(i>=0 && FpDataBase[i] > iKey)
 79         {
 80             FpDataBase[i + 1] = FpDataBase[i];
 81             i = i-1;
 82         }
 83         FpDataBase[i + 1] = iKey;
 84     }
 85 }
 86 void SORT DoubleSort(void)     //double数据插入排序
 87 {
 88     int i,j;
 89     double iKey;
 90 
 91     for(j=1; j<iTotle; j++)
 92     {
 93         iKey = DpDataBase[j];
 94 
 95         i = j-1;
 96         while(i>=0 && DpDataBase[i] > iKey)
 97         {
 98             DpDataBase[i + 1] = DpDataBase[i];
 99             i = i-1;
100         }
101         DpDataBase[i + 1] = iKey;
102     }
103 }
104 
105 void SORT IntSort(void)      //int数据插入排序
106 {
107     int i,j;
108     int iKey;
109 
110     for(j=1; j<iTotle; j++)
111     {
112         iKey = IpDataBase[j];
113 
114         i = j-1;
115         while(i>=0 && IpDataBase[i] > iKey)
116         {
117             IpDataBase[i + 1] = IpDataBase[i];
118             i = i-1;
119         }
120         IpDataBase[i + 1] = iKey;
121     }
122 }
123 
124 int SORT SortRun(void)
125 {
126     void (*PFUN)();
127     if(1 == iType)
128     {
129         PFUN = IntSort;
130     }
131     else if(2 == iType)
132     {
133         PFUN = FloatSort;
134     }
135     else
136     {
137         PFUN = DoubleSort;
138     }
139 
140     PFUN();
141     return TRUE;
142 }
143 
144 int SORT EndPrint(void)             //数据输出
145 {
146     int i;
147     if(NULL == DataBase)
148     return FALSE;
149 
150     switch(iType)
151     {
152         case 1:                                //int型数据输出
153             for(i=0; i<iTotle; i++)
154             {
155                 printf("%d ", IpDataBase[i]);
156             }
157             printf("\n");
158             break;
159         case 2:                              //float型数据输出
160             for(i=0; i<iTotle; i++)
161             {
162                 printf("%f ", FpDataBase[i]);
163             }
164             printf("\n");
165             break;
166         case 3:                            //double型数据输出
167             for(i=0; i<iTotle; i++)
168             {
169                 printf("%f ", DpDataBase[i]);
170             }
171             printf("\n");
172             break;
173         default:
174             fprintf(stderr, "error ..");
175             return FALSE;
176     }
177     return TRUE;
178 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值