返回顶部

收藏

C语言数组去重代码演示

更多
#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语言

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. zhu329599788@126 发表 2015-07-29 13:17:40 在C语言中如何使用malloc动态申请一维数组
  2. Itachi 发表 2012-03-22 02:22:04 [转]C语言的数组初始化
  3. One Coder 发表 2013-02-28 14:26:17 数组全排列递归算法 C语言实现
  4. One Coder 发表 2013-03-17 09:25:31 数据结构 有序数组表示稀疏矩阵
  5. 博主 发表 2014-09-27 00:00:00 《征服C指针》笔记 - 数组和指针的微妙关系
  6. silence 发表 2014-02-03 12:40:21 数组与指针
  7. 跳跳 发表 2011-10-13 05:32:42 关于sizeof与&a的疑问
  8. haipo 发表 2013-10-03 15:40:04 C 语言中的变长数组
  9. Arien 发表 2014-02-13 08:44:57 C语言实现数组(ArrayList)
  10. 博主 发表 2013-06-04 06:14:26 【C++11】再认识C语言中的指针与数组的区别
  11. 跳跳 发表 2012-04-03 09:15:17 如何计算大数阶乘
  12. zhu329599788@126 发表 2016-03-12 16:19:14 C语言中清空数组

发表评论