Alx09

Radix directa

Nov 4th, 2020
2,154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.13 KB | None | 0 0
  1. #include    <stdio.h>
  2. #include    <stdlib.h>
  3. #include    <time.h>
  4.  
  5. int biti(int x, int k, int j) {
  6.     return (x >> k) &~(~0 << j);
  7. }
  8.  
  9.  
  10. void RadixDirect(int a[], int n) {
  11.     int b, m, i, j, k, aux, Trecere, M1;
  12.     b = sizeof(int) * 8; m = 4;
  13.     M1 = 16;
  14.     int numar[16], *T =(int *)malloc(sizeof(int) *n);
  15.     for (Trecere = 0; Trecere < b / m; Trecere++)
  16.     {
  17.         for (int l = 0; l <= M1 - 1; l++)
  18.             numar[l] = 0;
  19.         for (i = 0; i <= n; i++)
  20.         {
  21.             k = biti(a[i], Trecere * m, m);
  22.             numar[k]++;
  23.         }
  24.         for (j = 1; j <= M1 - 1; j++)
  25.             numar[j] = numar[j - 1] + numar[j];
  26.         for (i = n; i >= 0; i--) {
  27.             k = biti(a[i], Trecere * m, m);
  28.             aux = numar[k] - 1;
  29.             T[aux] = a[i];
  30.             numar[k]--;
  31.         }
  32.         for (i = 0; i <= n; i++)
  33.             a[i] = T[i];
  34.     }
  35. }
  36. void GenerateVector(int *a, int n) {
  37.     int i;
  38.     for (i = 0; i < n; i++)
  39.         a[i] = rand() % (n * 10);
  40. }
  41. void ShowVector(int *a, int n) {
  42.     int i;
  43.     for (i = 0; i < n; i++)
  44.         printf("%d ", a[i]);
  45. }
  46.  
  47. int main() {
  48.     int n = 20, a[20];
  49.     srand((unsigned)time(NULL));
  50.     GenerateVector(a, n);
  51.     ShowVector(a, n);
  52.     printf("\n");
  53.     RadixDirect(a, n);
  54.     ShowVector(a, n);
  55.     printf("\n");
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment