求解数组操作算法,用C语言!该怎么解决

求解数组操作算法,用C语言!
开始:1 1 6 6 7 1
  a[0] a[1] a[2] a[3] a[4] a[5]

结果:1 6 7
  b[0] b[1] b[2]

把数组中重复的数字只保留一次,例原数组1,1,6,6,7,1去重复数字后数组是1,6,7
求以上操作的算法.

------解决方案--------------------
通过遍历,让第一个数和后面的数据比较,将后面重复的数据值设置为某一个值,比如第一个1和后面的数据比较,把后面的1值改为-1,然后输出时遇到-1则不输出。
------解决方案--------------------
C/C++ code
#include <stdio.h>

int main(){
        int hash[1000]={0};
        int num=0;
        while(scanf("%d",&num)&&num!=-1){
                if(hash[num]==0){
                        printf("%d,",num);
                        hash[num]=1;
                }
        }
        printf("\n");
}

------解决方案--------------------
循环比较就可以了啊。
------解决方案--------------------
要不先给数组从小到大排个序?

从第一个数开始,后面的数跟前一个数不相等就留下.
------解决方案--------------------
第一个数和后面比较 相等则删除当前数据,否则数组下标++
------解决方案--------------------
看看 严慰敏的 数据结构 视频
------解决方案--------------------
探讨

第一个数和后面比较 相等则删除当前数据,否则数组下标++

------解决方案--------------------
先排序,再跟直接后继比较,相等删除当前数,位置后移,不等,直接后移一个
------解决方案--------------------
C/C++ code
//将out.txt文件中的内容排序并去重,结果保存到unique.txt中
#include <stdio.h>
#include <stdlib.h>
#define MAXLNO 10000000 //能处理的最大行数
#define MAXLEN 20       //能处理的最大行宽,包括行尾的\n和字符串尾的\0
char buf[MAXLNO][MAXLEN];
int ln,i;
FILE *f;
int cmpfun( const void *arg1, const void *arg2 ) {
    return strcmp((const char *)arg1,(const char *)arg2);
}
int main() {
    f=fopen("out.txt","r");
    if (NULL==f) {
        printf("Can not find file out.txt\n");
        return 1;
    }
    ln=0;
    while (1) {
        if (NULL==fgets(buf[ln],MAXLEN,f)) break;
        ln++;
        if (ln>=MAXLNO) {
            printf("Lines >%d ignored.",MAXLNO);
            break;
        }
    }
    fclose(f);
    if (ln>1) qsort(buf,ln,MAXLEN,cmpfun);
    f=fopen("unique.txt","w");
    if (NULL==f) {
        printf("Can not create file unique.txt\n");
        return 2;
    }
    fprintf(f,"%s",buf[0]);
    if (ln>1) for (i=1;i<ln;i++) {
        if (strcmp((const char *)buf[i-1],(const char *)buf[i])) fprintf(f,"%s",buf[i]);
    }
    fclose(f);
    return 0;
}