闲着无聊,看到一个朋友问如何将一个数组中重复元素删除并只保留其中一个,于是写了下面的测试代码,没有排序,没有申请多余的空间,方法是将重复的元素放到数组的最后并缩短数组长度,因此,如果某个元素重复的次数比较多的话可以一次将数组缩短好多,下面贴上代码吧:
int _tmain(int argc, _TCHAR* argv[])
{
int l1, l2;
int i, j;
int x;
int t, k;
int a[] = {0, 0, 20, 10, 3, 3, 5, 2, 7, 3, 8, 9, 3, 7, 2, 5, 3, 3, 6, 9, 10, 7, 9, 20, 20, 0, 0, 0, 0};
int len = sizeof(a)/sizeof(a[0]);
l1 = l2 = len;
for(i=0; i<l1; ++i)
{
k = a [ i ];
l2 = l1;
for(j=i+1; j<l2; ++j)
{
if(a[j] == k)
{
for(x = l2-1; x>j && a[x] == k; --x);
l2 = x;
if(l2 > j)
{
t = a[j];
a[j] = a[l2];
a[l2] = t;
}
}
}
l1 = l2;
}
for(i=0; i<l1; ++i)
{
printf("%d ", a[ i ]);
}
getchar();
return 0;
}