Advertisement
Guest User

Untitled

a guest
Mar 28th, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int tPow(int n) {
  5.     int result = 1;
  6.     for(int i=0;i<n;i++) result *= 10;
  7.     return result;
  8. }
  9.  
  10. void print(int *t, int n) {
  11.     for(int i=0;i<n;i++) printf("%d\n",t[i]);
  12. }
  13.  
  14. void countingSort(int *t, int n, int k) {
  15.     int *B = malloc(n*sizeof(int));
  16.     int C[10];
  17.  
  18.     print(t,n);
  19.     for(int i=0;i<10;i++) C[i] = 0;
  20.     for(int i=0;i<n;i++) C[ (t[i]/tPow(k))%10 ]++;
  21.     for(int i=0;i<10;i++) C[i] += C[i-1];
  22.     for(int i=n-1;i>=0;i--) {
  23.         C[  (t[i]/tPow(k))%10 ]--;
  24.         B[ C[ (t[i]/tPow(k))%10 ] ] = t[i];
  25.     }
  26.     for(int i=0;i<n;i++) t[i] = B[i];
  27.     print(t,n);
  28.     free(B);
  29.     free(C);
  30. }
  31.  
  32. void Radixsort(int *t, int n, int k) {
  33.     for(int i=0;i<k;i++) countingSort(t,n,i);
  34. }
  35.  
  36. int main(void) {
  37.     int Z, n, k;
  38.     scanf("%d",&Z);
  39.     for(int i=0;i<Z;i++) {
  40.         scanf("%d%d",&n,&k);
  41.         int *t = malloc(n*sizeof(int));
  42.         for(int j=0;j<n;j++) scanf("%d",&t[j]);
  43.         print(t,n);
  44.         Radixsort(t,n,k);
  45.         print(t,n);
  46.         free(t);
  47.     }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement