time函数跟difftime函数,time函数的参数返回和返回值有区别

time函数和difftime函数,time函数的参数返回和返回值有区别?
《数据结构与算法分析,c语言原书第二版》中 第二章 的2.7.1题:
    需要生成前N个自然数的随机置换。例如:【4,3,1,5,2】和【3,1,4,2,5】就是合法的置换。但是【5,4,1,2,1】却不是。因为数1出现两次而数3却没有。下面是一种算法:
      如下填入A[0]到A[N-1]的数组A;为了填入A[i],生成随机数直到它不同于生成的A[0],A[1],...A[i-1]时,再将其填入A[i]。

   对于这个算法,我自己写的代码(linux-centos下):

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <unistd.h>
#include "log.h"

#define N 10000

int main(int argc, char **argv)
{
        logInit(argv[0], __FILE__, __LINE__);

        int a[N] = {0};
        time_t ts, te, ts1, ts2;
        time(&ts);
//      ts1 = time(NULL);...........a

        first(N, a);
//      sleep(3);..................b
        
        time(&te);
//      ts2 = time(NULL);.................c
        
        int i = 0;
        char tmp[N*3] = {0};
        for (i = 0; i < N; ++i) {
                sprintf(tmp, "%s %d", tmp, a[i]);
        }
        logPrint("%s", tmp);
        logPrint("first所用时间:%f秒", difftime(te, ts));
//      logPrint("first所用时间:%f秒", difftime(ts2, ts1));

        return 0;
}

int first(int n, int *a)
{
        if (n < 0) {
                return -1;
        }

        int i = 0, j = 0, iFlag = 0;
        a[0] = RandInt(0, n-1);

        for (i = 1; i < n; ++i) {