新人求解怎么改能让它不运行时间过长?

输入n控制数组长度,去除数组中相同数字,剩余数字依次向前串

 #include <stdio.h>
int main()
{
    int i,j,a[20],n,k=0,m=0;
    scanf("%d\n",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++)
        for(j=i+1;j<n;j++)
    {
        if(a[i]==a[j])
        {
            for(k=j;k<n;k++)
               {
                   a[k]=a[k+1];
               }
                m=m+1;
                j=j-1;
        }
    }
    for(i=0;i<n-m;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

改进版,不会运行时间过长

 #include <stdio.h>
int main()
{
    int i,j,a[20],n,k=0,m=0;
    scanf("%d\n",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<n-m;i++)
        for(j=i+1;j<n-m;j++)
    {
        if(a[i]==a[j])
        {
            for(k=j;k<n-m;k++)
               {
                   a[k]=a[k+1];
               }
                m++;
                j--;
        }
    }
    for(i=0;i<n-m;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

#include
int main()
{
int i,j,a[20],n,k=0,m=0;
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(a[i]==a[j])
{
for(k=j;k<n;k++)
{
a[k]=a[k+1];
}
m=m+1;
j=j-1;
}
}
for(i=0;i<n-m;i++)
{
printf("%d ",a[i]);
}
return 0;
}