Advertisement
Guest User

Untitled

a guest
Oct 19th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.45 KB | None | 0 0
  1. /******************************************************************************
  2. * FILE: rowColumnSort.c
  3. * AUTHOR: Cristian Chilipirea
  4. * Skeleton for shear sort
  5. ******************************************************************************/
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. #include<math.h>
  9.  
  10. #define N 25
  11. #define SQRTN 5 // has to be sqrt(N)
  12.  
  13. void displayMatrix(int m[][SQRTN]) {
  14.     // DO NOT MODIFY
  15.     int i,j;
  16.     for(i = 0; i < SQRTN; i++) {
  17.         for(j = 0; j < SQRTN; j++) {
  18.             printf("%i ", m[i][j]);
  19.         }
  20.         printf("\n");
  21.     }
  22.     printf("\n");
  23. }
  24.  
  25. void copyMatrixInVectorSnake(int *v, int m[][SQRTN]) {
  26.     // DO NOT MODIFY
  27.     int i, j;
  28.     for(i=0;i<SQRTN;i++) {
  29.         if(i%2 == 0) {
  30.             for(j=0;j<SQRTN;j++) {
  31.                 v[i*SQRTN+j] = m[i][j];
  32.             }
  33.         } else {
  34.             for(j=SQRTN;j>0;j--) {
  35.                 v[i*SQRTN+(SQRTN-j)] = m[i][j-1];
  36.             }
  37.         }
  38.     }
  39. }
  40.  
  41. void compareVectors(int * a, int * b) {
  42.     // DO NOT MODIFY
  43.     int i;
  44.     for(i = 0; i < N; i++) {
  45.         if(a[i]!=b[i]) {
  46.             printf("Sorted incorrectly\n");
  47.             return;
  48.         }
  49.     }
  50.     printf("Sorted correctly\n");
  51. }
  52.  
  53. void displayVector(int * v) {
  54.     // DO NOT MODIFY
  55.     int i;
  56.     for(i = 0; i < N; i++) {
  57.         printf("%i ", v[i]);
  58.     }
  59.     printf("\n");
  60. }
  61.  
  62. int cmp(const void *a, const void *b) {
  63.     // DO NOT MODIFY
  64.     int A = *(int*)a;
  65.     int B = *(int*)b;
  66.     return A-B;
  67. }
  68.  
  69. int cmp_neg(const void *a, const void *b) {
  70.     // DO NOT MODIFY
  71.     int A = *(int*)a;
  72.     int B = *(int*)b;
  73.     return B-A;
  74. }
  75.  
  76. int main(int argc, char *argv[]) {
  77.     srand(42);
  78.     int m[SQRTN][SQRTN];
  79.     int v[N];
  80.     int vQSort[N];
  81.     int i,j;
  82.     int aux[SQRTN];
  83.     // generate the vector v with random values
  84.     // DO NOT MODIFY
  85.     for(i = 0; i < SQRTN; i++)
  86.         for(j = 0; j < SQRTN; j++)
  87.             m[i][j] = rand()%10;
  88.  
  89.     // make copy to check it against qsort
  90.     // DO NOT MODIFY
  91.     copyMatrixInVectorSnake(vQSort, m);
  92.     qsort(vQSort, N, sizeof(int), cmp);
  93.     int steps;
  94.     for (steps = 1; steps <= N; steps = steps * 2) {
  95.  
  96.         for (i = 0; i < SQRTN; i = i + 2) {
  97.            
  98.             qsort(m[i], SQRTN, sizeof(int), cmp);
  99.            
  100.         }
  101.         for (i = 1; i < SQRTN; i = i + 2) {
  102.                
  103.             qsort(m[i], SQRTN, sizeof(int), cmp_neg);
  104.            
  105.         }
  106.         for (i = 0; i < SQRTN; i++) {
  107.                
  108.             for (j = 0; j < SQRTN; j++)
  109.                 aux[j] = m[j][i];
  110.             qsort(aux, SQRTN, sizeof(int), cmp);
  111.             for (j = 0; j < SQRTN; j++)
  112.                 m[j][i] = aux[j];  
  113.         }
  114.     }
  115.     // sort the matrix m using ShearSort
  116.  
  117.  
  118.     displayMatrix(m);
  119.     copyMatrixInVectorSnake(v, m);
  120.     displayVector(v);
  121.     displayVector(vQSort);
  122.     compareVectors(v,vQSort);
  123.  
  124.     return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement