一种更有效的实施
int i, j;
/* new length of modified array */
int NewLength = 1;
for(i=1; i< Length; i++){
for(j=0; j< NewLength ; j++)
{
if(array[i] == array[j])
break;
}
/* if none of the values in index[0..j] of array is not same as array[i],
then copy the current value to corresponding new position in array */
if (j==NewLength )
array[NewLength++] = array[i];
}
在此实现中,无需对数组进行排序。同样,如果找到了重复的元素,则此后无需将所有元素移动一个位置。
该代码的输出是大小为NewLength的array []
在这里,我们从数组中的第二个元素开始,并将其与数组中的所有元素进行比较,直到该数组。我们拥有一个额外的索引变量“ NewLength”,用于修改输入数组。NewLength variabel初始化为0。
array [1]中的元素将与array [0]比较。如果它们不同,则将使用array [1]修改array [NewLength]中的值并递增NewLength。如果它们相同,则不会修改NewLength。
因此,如果我们有一个数组[1 2 1 3 1],则
在“ j”循环的第一遍中,将array [1](2)与array0比较,然后将2写入array [NewLength] = array [1],因为NewLength = 2,因此array将为[1 2]
在“ j”循环的第二遍中,将array [2](1)与array0和array1比较。由于array [2](1)和array0是同一循环,因此这里会中断。因为NewLength = 2,所以数组将为[1 2]
等等