位排序

#include <stdlib.h>

#include <stdio.h>

 

void print(int arr[],int n){

    printf("\n");

    int i;

    for(i=0;i<n;i++)

    {

        printf("%d ",arr[i]);

    }

    printf("\n");

}

 

void bitSort(int arr[],int n,int max){

   int bitsSize=max/8+1;

   char* bits=malloc(max/8+1);

   memset(bits,0,bitsSize);

   int i,j;

   for(i=0;i<n;i++)

   {

       bits[arr[i]/8]=bits[arr[i]/8]|(1<<arr[i]%8);//將對應字節位變爲1

   }

   for(i=0;i<bitsSize;i++)

   {

       if(bits[i]!=0){

           for( j=0;j<8;j++){

               if(bits[i]&1<<j){

                   *arr++=i*8+j;//將字節位是1的數字取出

               }

           }

       }

   }

}

 

int main(int argc ,char** argv)

{

    int arr[]={1,4,5,3,34,6,9,22,99};

  int size=sizeof(arr)/sizeof(int);

  print(arr,size);

 

  bitSort(arr,size,100);

  print(arr,size);

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章