这个代码怎么写,有没有人教一下

输入若干字符串,按ASCII码从小到大顺序排序后输出。
要求:设计一个函数void fun(char **p,int n),其中p指向某个指针数组的首元素,函数的功能是对指针数组各元素所指向的n个字符串按ASCII码从小到大顺序排序(字典序),要求排序过程中不能对字符串本身作交换而是对各个字符型指针作交换。在主函数中,输入4个字符串,调用函数fun,输出排序结果。

供参考:

#include <stdio.h>
#include <string.h>
void sort(char ** p, int n);
int main()
{
    char a[50][100], * p[50];
    int  i, n;
    printf("输入n: ");
    scanf("%d", &n);
    printf("输入%d个字符串:\n", n);
    for (i = 0; i < n; i++) {
        scanf("%s", a[i]);
        p[i] = a[i];
    }
    sort(p, n);
    printf("\n从小到大排序:\n");
    for (i = 0; i < n; i++)
        printf("%s\n", p[i]);
    return 0;
}
void sort(char ** p, int n)
{
    char* pt;
    int  i, j;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - i - 1; j++)
        {
            if (strcmp(p[j], p[j + 1]) > 0)
            {
                pt = p[j];
                p[j] = p[j + 1];
                p[j + 1] = pt;
            }
        }
    }
}

#include <stdio.h>

void fun(char **p,int n)
{
    int i,j;
    char *k;
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(strcmp(p[i],p[j])>0)
            {
                k=p[i];
                p[i]=p[j];
                p[j]=k;
            }
        }
    }
}

int main()
{
    char *a[4];
    int i;
    for(i=0;i<4;i++)
    {
        scanf("%s",a[i]);
    }

    fun(a,4);

    for(i=0;i<4;i++)
    {
        printf("%s",a[i]);
    }

    return 0;
}