計數排序-純指針版

#include <stdlib.h>

#include <stdio.h>

 

//計數排序

int countSort(int arr[],int len,int min,int max){

    int bucketsLen=max-min+1;

    int* buckets=malloc(sizeof(int)*bucketsLen);

    int* bucketsRear=buckets+bucketsLen;

    int*rear=arr+len;

    int* p=arr;

    while (p<rear)

    {

       buckets[*p++-min]++;

    }

    p=buckets;

    //遍歷buckets

    while (p<bucketsRear)

    {

        //若存在,取數

        if(*p>0){

           int* q=arr;

           while(*p>arr-q){

               *arr++=p-buckets+min;

           }

        }

     p++;

 

    }

    return 0;

}


 

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

     printf("\n");

    for(int i=0;i<len;i++)

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

    printf("\n");

}

 

int main(int argc,char** argv){

 

  int arr[]={1,12,2,3,2,2,8,10,11,4,5,6,3};

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

    print(arr,len);

  countSort(arr,len,1,20);

  print(arr,len);

 

 return 0;

}

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