Advertisement
loulett

HW2_matrix

Dec 8th, 2014
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #define _CRT_SECURE_NO_WARNINGS
  5.  
  6.  
  7. int compare(void *a, void *b)
  8. {
  9.     return(*(int*)a - *(int*)b);
  10. }
  11.  
  12. typedef int(*PCmp)(void *, void*);
  13.  
  14. int partition(void * a, int l, int r, int sz, PCmp cmp)
  15. {
  16.     char *carr = (char *)a;
  17.     int i = l - 1;
  18.     void *ptmp = malloc(sz);
  19.     for (int j = l; j < r - 1; ++j)
  20.     {
  21.         if (cmp(carr + j*sz, carr + (r - 1)*sz) <= 0)
  22.         {
  23.             i++;
  24.             memcpy(ptmp, carr + i*sz, sz);
  25.             memcpy(carr + i*sz, carr + j*sz, sz);
  26.             memcpy(carr + j*sz, ptmp, sz);
  27.         }
  28.     }
  29.     memcpy(ptmp, carr + (i + 1)*sz, sz);
  30.     memcpy(carr + (i + 1)*sz, carr + (r - 1)*sz, sz);
  31.     memcpy(carr + (r - 1)*sz, ptmp, sz);
  32.     return i + 1;
  33. }
  34.  
  35. int qsort(int *a, int l, int r, int k)
  36. {
  37.     if (l >= r)
  38.         return -1;
  39.     int q = partition(a, l, r, sizeof(int), compare);
  40.     if (q == k)
  41.         return a[k];
  42.     else if (q > k)
  43.         qsort(a, l, q, k);
  44.     else
  45.         qsort(a, q + 1, r, k);
  46. }
  47.  
  48. int main()
  49. {
  50.     int m = 0, n = 0, c = 0;
  51.     scanf("%d", &m);
  52.     scanf("%d", &n);
  53.     int** matrix = (int**)malloc(m*sizeof(int));
  54.     for (int i = 0; i < m; i++)
  55.     {
  56.         matrix[i] = (int*)malloc(n*sizeof(int));
  57.         for (int j = 0; j < n; j++)
  58.             scanf("%d", &matrix[i][j]);
  59.     }
  60.     int* ans = (int*)malloc(m*sizeof(int));
  61.     for (int i = 0; i < m; i++)
  62.     {
  63.         scanf("%d", &c);
  64.         ans[i] = qsort(matrix[i], 0, n, c);
  65.     }
  66.     for (int i = 0; i < m; i++)
  67.         printf("%d ", ans[i]);
  68.     return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement