起因
在九度练习acm的时候,有道题我认为应该先进行数组去重操作,由于工作中我大部分都是用php写代码,php中数组去重只要一个array_diff()函数即可实现,但是到C语言中,我就没有现成的api函数可以让我调用了,因此我自己实现了一个算法,进行数组去重,但是这个算法有明显的缺陷,我会先把算法展示出来,然后解释算法的缺陷
数组去重代码
#include <stdio.h>
#include <stdlib.h>
#define false -1
int arraydiff(int *A, int max, int len);
int main()
{
int a[100];
int n, k, i, len, max;
while(scanf("%d",&n) != EOF)
{
//接收客户端数据
for(i = 0; i < n; i ++)
{
scanf("%d",&a[i]);
}
scanf("%d",&k);
//找到a[i]的最大数
max = a[0];
for(i = 1; i < n; i ++)
{
if(max < a[i])
max = a[i];
}
//数组去重加由小到大排序
len = arraydiff(a, max, n);
//输出第K大的数
printf("%d\n",a[k - 1]);
}
return 0;
}
/**
* Description:数组去重算法
*/
int arraydiff(int *A, int max, int len)
{
int arrayflag[max + 1];
int i, j;
//初始化标志数组
for(i = 0; i <= max; i ++)
{
arrayflag[i] = false;
}
//剔除算法
for(i = 0; i < len; i ++)
{
arrayflag[A[i]] = A[i];
}
//取出有效数
for(i = 0, j = 0; i <= max; i ++)
{
if(arrayflag[i] != false)
{
A[j ++] = arrayflag[i];
}
}
return j;
}
缺陷
因为该算法需要重新申请数组空间,而数组空间的大小则是以去重数组中的最大数为标准,这样就会出现很极端的情况,我的数组int A[4] = {112000,11200,1,2},尽管需要去重的数组A大小为4,我却要重新申请112000大小的新的内存空间,这是极大的浪费
需求
希望大家能给我回帖,写出您认为比较好的数组去重算法,建议代码最好用C实现,凡是给我留言者,我必定回复
分享到:
相关推荐
合并一维字符串数组并去重,提供了一个简单的小实例,可以试试看更复杂的情况是否可以处理得好。
c语言数组 C语言数组_C语言实现使用静态数组实现循环队列
c语言数组 C语言数组_C语言实现使用动态数组来构建栈结构
C语言数组课件PPT C语言数组课件PPT C语言数组课件PPT C语言数组课件PPT C语言数组课件PPT C语言数组课件PPT C语言数组课件PPT C语言数组课件PPT C语言数组课件PPT C语言数组课件PPT C语言数组课件PPT C语言数组课件...
6.1 C语言数组的概念 6.2 C语言二维数组 6.3 C语言数组元素的查询 6.4 C语言字符数组和字符串 6.5 C语言字符串处理函数 6.6 C语言字符
链表去重c语言
用C语言中的malloc函数和free函数实现的动态数组,分三个文件
音频文件数组转成c语言的数组音频文件数组转成c语言的数组音频文件数组转成c语言的数组音频文件数组转成c语言的数组音频文件数组转成c语言的数组音频文件数组转成c语言的数组音频文件数组转成c语言的数组
c语言数组
广工《算法和高级数据结构教程》 逆序对(树状数组) c语言实现
C语言 不定长数组输入 很简短。。。。。。。。。。。。。。。。。。。。
树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c...
用C 语言实现了软件FIFO,主要是靠数组的方式来实现的,经测试能可靠使用。
数组的大小是固定的, 不变的,一旦确定就不能改变。 但此程序的技巧就在于突破了数组大小的固定,实现了动态分配数组。 谢谢支持!
C语言全套资料 C语言程序设计 C语言算法 C语言课件 C语言顺序程序设计,C语言数组,C语言循环控制,C语言预处理命令,C语言文件操作指针,C语言选择结构程序设计,C语言结构体与共用体,C语言文件操作,C语言函数
数组-C语言实验.doc
纯C语言实现字符串拆分操作,把字符串拆分成字符串数组,然后再输出。 使用sstream方法,作为底层驱动操作实现非常方便。
用递归些的一个简洁易懂的用数组实现的N皇后算法。 不明白请留言~YY<C Code>
从这里学习到一个数组的赋值的方法,即实际赋值可以按不同的顺序(只要是合法的下标),而不是仅限于从0~N这样的顺序去赋值。