闲着无聊,看到一个朋友问如何将一个数组中重复元素删除并只保留其中一个,于是写了下面的测试代码,没有排序,没有申请多余的空间,方法是将重复的元素放到数组的最后并缩短数组长度,因此,如果某个元素重复的次数比较多的话可以一次将数组缩短好多,下面贴上代码吧:
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;
}