• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

C语言数组去重代码示范

OC/C/C++ 水墨上仙 1944次浏览

C语言数组去重代码演示
原文:http://blog.csdn.net/zinss26914/article/details/8075224

#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&nbspA[4]&nbsp=&nbsp{112000,11200,1,2},尽管需要去重的数组A大小为4,我却要重新申请112000大小的新的内存空间,这是极大的浪费


喜欢 (0)
加载中……