我在csdn看了好几篇关于一维数组去重的博客,发现他们都是先排序或者写的很复杂,我觉得看了没有多大收获,所以打算自己写一篇博客,供新手参考,大佬就不用过来看了,嘿嘿。
一维数组去重就是将数组中重复的数据置为0,嘿嘿,反正我是这么做的,仅供大家参考。
#include<stdio.h>
/*
@brief: 数组去重
@parma:*pArr接收数组首元素
@parma:n数组的长度
*/
void arr_rpttn(int *pArr, int n)
{
int i, j, k;
/** 定义cnt记录删除元素的个数 */
int cnt = 0;
/** 遍历数组,每删除一个元素就减1 */
for(i=0; i<n-cnt; i++)
{
/** pArr[i]与后面的元素比较 */
for(j=i+1; j<n-cnt-1; j++)
{
/** 如果pArr[i]与pArr[j]重复则将pArr[j]覆盖 */
if(pArr[i] == pArr[j])
{
/** j后的元素往前移 */
for(k=j; k<n-cnt-1; k++)
{
pArr[k] = pArr[k+1];
}
/** j--很重要 */
j--;
/** 删除一个元素cnt加1 */
cnt++;
/** 将移动的最后一个元素位置置0 */
pArr[k] = 0;
}
}
}
/** 函数结束 */
return;
}
int main(void)
{
int a[10] = {1, 1, 1, 2, 3, 4, 2, 6, 7, 2};
int i;
/** 调用数组去重函数 */
arr_rpttn(a, 10);
/** 循环打印数组 */
for(i=0; i<10; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}