写了一个inst.c文件:

/*======================================
// 函数名: inst
// 功能描述: 直接插入排序
// 输入参数: x 存放待排序数据的数组
// n 数组长度
// 返回值: 无
//=======================================*/


void inst(int *x,int n)
{
int i,j,t;
for(i = 1; i < n; i ++) /* i 表示插入次数, 共进行 n-1 次插入 */
{
t = x[i];
for( j = i - 1; j >= 0; j --) /* 寻找要插入t的位置 */
if(t < x[j]) /* 后移,空出位置 */
x[j + 1] = x[j];
else
break; /* 找到位置时,退出循环*/
x[j + 1] = t; /* 直接插入 */
}
}


功能是用来进行插入排序。

写了一个shel.c文件:

/*============================================
// 函数名: shel
// 功能描述: 希尔排序
// 输入参数: x 存放待排序数据的数组
// n 数组长度
// 返回值: 无
//==============================================*/
void shel(int *x,int n)
{
int i,j,d,t;
d = n/2; /* 初始步长是 n/2 */
while (d > 0) /* 按不同步长进行排序 */
{
for(i = d; i < n; i ++) /* 将x[i]插入到对应分组的合适位置中*/
{
t = x[i];
j = i - d;
while((j >= 0) && (x[j] > t)) /* 比较和移动 */
{
x[j + d] = x[j];
j = j -d;
}
x[j + d] = t;
}
d = d/2;
}
}

写了一个主文件inst0.c,用来包括inst.c,shel.c文件:


#include "stdio.h"
#include "inst.c"
#include "shel.c"

main()
{
extern void inst(int *x, int n);
extern void shel(int *x, int n);
int i,j,p[50],p1[50];
printf("Data:\n");
for(i = 0; i < 5; i ++)
{
for(j = 0; j < 10; j ++)
{
p[10 * i + j] = 20 + 10*i -j; /*生成一些无序数据*/
p1[10 * i + j] = p[10 * i + j];
printf("%d ",p[10 * i + j]);
}
printf("\n");
}
printf("Insert Sort:\n"); /* 直接插入排序的结果 */
inst(p, 50);
for ( i = 0; i < 5; i ++)
{
for( j = 0; j < 10; j ++)
printf("%d ", p[10*i + j]);
printf("\n");
}
printf("Shell Sort:\n"); /* 希尔排序的结果 */
shel(p1, 50);
for(i = 0; i < 5; i ++)
{
printf("%d ", p1[10*i + j]);
printf("\n");
}
}



此时进行编译:gcc -o   inst0 inst0.c inst.c shel.c,会报错:

/tmp/ccYEBSct.o: In function `inst':
inst.c:(.text+0x0): multiple definition of `inst'
/tmp/ccNrTZCA.o:inst0.c:(.text+0x0): first defined here
/tmp/ccdZkuQl.o: In function `shel':
shel.c:(.text+0x0): multiple definition of `shel'
/tmp/ccNrTZCA.o:inst0.c:(.text+0xa3): first defined here
collect2: error: ld returned 1 exit status


需要修改一下inst0.c文件:

去掉    #include "inst.c"
           #include "shel.c"

两句,

再进行编译:

gcc -o inst0 inst0.c inst.c shel.c

会生成可执行文件:ints0,

执行该文件:./inst0

Data:
20  19  18  17  16  15  14  13  12  11  
30  29  28  27  26  25  24  23  22  21  
40  39  38  37  36  35  34  33  32  31  
50  49  48  47  46  45  44  43  42  41  
60  59  58  57  56  55  54  53  52  51  
Insert Sort:
11   12   13   14   15   16   17   18   19   20   
21   22   23   24   25   26   27   28   29   30   
31   32   33   34   35   36   37   38   39   40   
41   42   43   44   45   46   47   48   49   50   
51   52   53   54   55   56   57   58   59   60   
Shell Sort:
11   12   13   14   15   16   17   18   19   20   
21   22   23   24   25   26   27   28   29   30   
31   32   33   34   35   36   37   38   39   40   
41   42   43   44   45   46   47   48   49   50   
51   52   53   54   55   56   57   58   59   60