起因
在九度练习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语言 不定长数组输入 很简短。。。。。。。。。。。。。。。。。。。。
树状数组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语言链表数组-c语言手写单链表实现,数组和链表结构对比小结和个人理解 数组和链表.pdf
音频文件数组转成c语言的数组音频文件数组转成c语言的数组音频文件数组转成c语言的数组音频文件数组转成c语言的数组音频文件数组转成c语言的数组音频文件数组转成c语言的数组音频文件数组转成c语言的数组
纯C语言实现字符串拆分操作,把字符串拆分成字符串数组,然后再输出。 使用sstream方法,作为底层驱动操作实现非常方便。
数组-C语言实验.doc
用递归些的一个简洁易懂的用数组实现的N皇后算法。 不明白请留言~YY<C Code>