zoukankan      html  css  js  c++  java
  • C 实现位图排序

    应用场景:

         1到N的不重复乱序数据,乱序数据总最大不超过N,需要高效的排序。

    sorr.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define mask 0x1F
    #define shift 5
    /**************************
     * function name: bitVect
     * description :according size to malloc memory
     * params :
     *    size --input array size,every element in array can't over size
     * return : return a fixed memory 
     *************************/
    int *bitVect(int size)
    {
        int arr_size=0;
        int *pt=NULL;
        if((size%(1<<shift))==0)
        {
            arr_size=size/(1<<shift);
        }
        else
        {
            arr_size=(size/(1<<shift))+1;
        }
        printf(" malloc sizeof(int) count :%d
    ",arr_size);
        pt=(int *)malloc(sizeof(int)*arr_size);
        if(!pt){fprintf(stderr," can't malloc memory 
    ");return NULL;}
        memset(pt,0,arr_size);
        return  pt;
    }
    /*************************
     * function name: bitFree
     * description :free a memory named target
     * params :
     *    target --a pointer that is needed to free
     * return : if opertation is ok,that return 1
     * ***********************/
    int bitFree(void *target)
    {
        if(target!=NULL)
        {
          free(target);
          target=NULL;
          printf(" target free ok
    ");
        }
        else
        {
            return 1;
        }
        return 0;
    }
    /***********************
     * function name:setBit
     * description :set bit value in one element from array
     * params :
     *     
     *    
     *********************/
    void setBit(int elem,int *parr)
    {
      int pos=elem>>shift;
      //printf(" pos = %d
    ",pos);
      *(parr+pos)|=(1<<(pos&mask));
    }
    void clsBit(int n,int *parr)
    {
        int pos=n>>shift;
       // printf("clsBit pos : %d
    ",pos);
        *(parr+pos)&=(~(1<<(pos&mask)));
    }
    int isOne(int elem,int *parr)
    {
        int pos=elem>>shift;
        int flag= *(parr+pos)&(1<<(pos&mask));
        //printf("	isOne:%d
    ",flag);
        return flag;
    }
    void  test()
    {
        int *parr=bitVect(6);
        int arr[6]={1,5,4,3,2,6};
        printf("reginal data :
    ");
        int i=1;
        for(;i<=6;i++)
        {
            clsBit(i,parr);
            if(i==6)
            {
                printf("%d
    ",arr[i-1]);
            }
            else
            {
                printf("%d,",arr[i-1]);
            }
        }
        printf("
    ");
        i=0;
        for(;i<=6;i++)
        {
            setBit(arr[i-1],parr);
        }
        i=1;
        printf("sort data :
    ");
        for(;i<=6;i++)
        {
            if(isOne(i,parr))
            {
                if(i==6)
                {
                    printf(" %d
    ",i);
                }
                else
                {
                    printf(" %d,",i);
                }
            }
        }
        printf(" bitFree(%p) :%d
    ",parr,bitFree(parr));
    }
    int main(void)
    {
        test();
        return 0;
    }
  • 相关阅读:
    android loginDemo +WebService用户登录验证
    Integrating Google Sign-In into Your Android App
    Android 应用程序集成Google 登录及二次封装
    facebook 分享
    Android Facebook和Twitter登录和分享完整版
    Android 友盟社会化组件-分享实现
    Android集成友盟社会化分享功能
    c 判断是否为 字母或数字(iswalnum example)
    c 判断字符是否为字母 (iswalpha example)
    下载安装Xocde并创建一个C语言的项目工程
  • 原文地址:https://www.cnblogs.com/innobase/p/4574967.html
Copyright © 2011-2022 走看看