1.原理
让第一个元素和后面的比较,如果相等,把尾元素与其交换然后尾元素变为0.
2.实现
主函数
int main()
{
//任给一个数组
int arr[20] = { 1,3,2,7,4,3,1,7,9,11,2,12,34,2,9,4,15,26,29,26 };
//计算它的元素个数
int n = sizeof(arr) / sizeof(arr[0]);
//定义一个函数,count是用来接收重复元素的个数,Rde就是消重函数
int count=Rde(arr, n);
//打印消重后的元素
for (int i = 0; i < 20-count; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
Rde函数
//指针接收首元素的地址,n接收元素个数
int Rde(int* arr, int n)
{
//定义一个count用力记录重复元素的个数
int count = 0;
//和冒泡排序一样,一个大流程(及让某个元素和后面的所有元素依次比较完一轮)
//的执行次数要比元素个数小1,当有重复数字被减去时执行次数要减count
for (int i = 0; i < n - count-1; i++)
{
//j是被比元素,i是比较元素,为避免元素自身进行比较,把j的初始化设为i+1
//j要一直比到最后一个元素(初始下标为n-1),所以当有数组中有元素被减去时n要-count
for (int j = i + 1; j < n - count; j++)
{
//往后比较,当有重复元素让下标为n-1(当有元素被减去时最后一个元素就是n-count-1)
//替换arr[j],然后把最后一个元素设置为0,同时count要++以记录重复元素的个数
if (arr[i] == arr[j])
{
arr[j] = arr[n-count-1];
arr[n-count-1] = 0;
count++;
}
}
}
//返回一个count及重复元素的个数,n-count就是不重复的元素
return count;
}
3.总结
这是一个简单的消重,效率不是很高,但很简单。