高效编程->小弟我想写一个数组去重复的程序,在不新建数组,又不删除元素的情况上

高效编程->我想写一个数组去重复的程序,在不新建数组,又不删除元素的情况下
#include <stdio.h>
void main()
{
int a[30]={1,2,3,3,4,5,5,5,6,7,7,7,7,7,8,9,9,10,11,12,13,14,15,16,17,18,19,20,21,22};
int i,q=0;
int *last,*p;

last=&a[30];
for(p=&a;p<=last;p++){
while(*p >= *(p+q))q++;
*p= *(p+q);
}
last=*p;
for(i=0;i<=*last;i++)
printf("%d",a[i]);
printf("\n");
}

我想写一个数组去重复的程序(高效编程),在不新建数组,又不删除元素的情况下
但可惜的是,此程序出错了,希望同行们能给予一些指点,在此谢过各位好友了...谢谢


------解决方案--------------------
last=*p; //last是地址,*p是值。

for(i=0;i<=*last;i++) //这个可能会是死循环
printf("%d",a[i]);

看了会,发现程序得大动。
------解决方案--------------------
C/C++ code


#include <stdio.h>
void main()
{
    int a[30]={1,2,3,3,4,5,5,5,6,7,7,7,7,7,8,9,9,10,11,12,13,14,15,16,17,18,19,20,21,22};
    int i;//q=0;
    int *last,*p, *q;
    p = a;
    last=&a[30];
    for(q=a;q<=last;q++){
        if (*q > *p)
        {
            p ++;
            *p = *q;
        }
    }
    //last=p;
    for(q=a;q<=p;q++)
        printf("%d ",*q);
    printf("\n");
}