我在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;
}