Advertisement
oscar-alex11

Bit-Index Sort

Sep 23rd, 2014
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.06 KB | None | 0 0
  1. /*
  2.  * File:   bitIndexSort.c
  3.  * Author: Oscar
  4.  *
  5.  * Created on 19 de septiembre de 2014, 10:36 PM
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #define NUM_ELEM 130
  11. #define MAX 700  //Poner un número mayor o igual al verdadero máximo del arreglo
  12. #define Bit 32
  13. #include <time.h>
  14. #include <windows.h>
  15.  
  16. void pprint(int arr[]) {
  17.     int i;
  18.     for (i=0; i<NUM_ELEM; i++)
  19.         printf("%d ", arr[i]);
  20.     printf("\n");  
  21. }
  22.  
  23. void bitIndex_sort(int arr[]) {
  24.    
  25.     int maxBidx = MAX/Bit+1;
  26.     unsigned int Bidx[maxBidx];
  27.     int ind=0;
  28.     int off=0;
  29.     int i, j;
  30.    
  31.     for(i=0; i<maxBidx; i++)
  32.        Bidx[i]=0;
  33.    
  34.     for (i=0; i<NUM_ELEM; i++){
  35.         ind = arr[i]/Bit;
  36.         off = arr[i]%Bit;
  37.         Bidx[ind] = Bidx[ind] | (1<<off);
  38.     }
  39.    
  40.     i=0;
  41.     for (j=0; j<=maxBidx-1; j++){
  42.     //for (j=maxBidx-1; j>=0; j--){
  43.         while (Bidx[j]>0){
  44.             off=(__builtin_ctz(Bidx[j]));
  45.             //off=(Bit-1)-(__builtin_clz(Bidx[j]));
  46.             arr[i] = j*Bit+off;
  47.             Bidx[j] -= (1<<off);
  48.             i++;
  49.         }
  50.     }
  51.    
  52.     printf("Arreglo de índices:\n");
  53.     pprint(Bidx);
  54. }
  55.  
  56. int main(int argc, char** argv) {
  57.     //int arr[NUM_ELEM] = {3, 6, 0, 4}; //3, 1, 8, 2, 9, 5};
  58.     int arr[NUM_ELEM] = {338, 196, 174, 548, 297, 122, 291, 352, 218, 17, 468, 143, 556, 574, 412, 249, 422, 219, 5, 439, 347, 459, 397, 89, 203, 361, 389, 326, 118, 213, 15, 313, 564, 611, 512, 109, 253, 215, 327, 269, 33, 471, 608, 234, 424, 381, 454, 431, 171, 150, 239, 568, 241, 443, 280, 631, 193, 132, 62, 583, 46, 24, 446, 154, 277, 11, 482, 547, 43, 305, 71, 2, 538, 496, 382, 344, 276, 552, 493, 514, 85, 306, 100, 65, 425, 499, 260, 557, 562, 194, 604, 585, 640, 593, 110, 247, 182, 47, 136, 27, 430, 479, 331, 324, 168, 410, 476, 255, 475, 250, 105, 86, 156, 16, 281, 111, 603, 270, 220, 165, 273, 162, 318, 364, 545, 486, 376, 140, 49, 309};
  59.     printf("Arreglo original:\n");
  60.     pprint(arr);
  61.    
  62.     bitIndex_sort(arr);
  63.    
  64.     printf("Arreglo ordenado:\n");
  65.     pprint(arr);
  66.  
  67.     return (EXIT_SUCCESS);
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement