Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- int biti(int x, int k, int j) {
- return (x >> k) &~(~0 << j);
- }
- void RadixDirect(int a[], int n) {
- int b, m, i, j, k, aux, Trecere, M1;
- b = sizeof(int) * 8; m = 4;
- M1 = 16;
- int numar[16], *T =(int *)malloc(sizeof(int) *n);
- for (Trecere = 0; Trecere < b / m; Trecere++)
- {
- for (int l = 0; l <= M1 - 1; l++)
- numar[l] = 0;
- for (i = 0; i <= n; i++)
- {
- k = biti(a[i], Trecere * m, m);
- numar[k]++;
- }
- for (j = 1; j <= M1 - 1; j++)
- numar[j] = numar[j - 1] + numar[j];
- for (i = n; i >= 0; i--) {
- k = biti(a[i], Trecere * m, m);
- aux = numar[k] - 1;
- T[aux] = a[i];
- numar[k]--;
- }
- for (i = 0; i <= n; i++)
- a[i] = T[i];
- }
- }
- void GenerateVector(int *a, int n) {
- int i;
- for (i = 0; i < n; i++)
- a[i] = rand() % (n * 10);
- }
- void ShowVector(int *a, int n) {
- int i;
- for (i = 0; i < n; i++)
- printf("%d ", a[i]);
- }
- int main() {
- int n = 20, a[20];
- srand((unsigned)time(NULL));
- GenerateVector(a, n);
- ShowVector(a, n);
- printf("\n");
- RadixDirect(a, n);
- ShowVector(a, n);
- printf("\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment