Advertisement
STANAANDREY

exam sda

Jan 16th, 2024
849
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 6
  4.  
  5. void swap(void* a, void* b, size_t size) {
  6.     void* tmp = malloc(size);
  7.     if (tmp == NULL) {
  8.         perror("");
  9.         exit(1);
  10.     }
  11.     memcpy(tmp, a, size);
  12.     memcpy(a, b, size);
  13.     memcpy(b, tmp, size);
  14.     free(tmp);
  15. }
  16.  
  17. int moveToBeg(int n, int v[]) {
  18.     int le = 0, ri = n - 1;
  19.     while (le < ri) {
  20.         while (v[le] < 0 && le < ri) {
  21.             le++;
  22.         }
  23.         while (!(v[ri] < 0) && le < ri) {
  24.             ri--;
  25.         }
  26.         if (le < ri) {
  27.             swap(&v[le], &v[ri], sizeof(int));
  28.             le++, ri--;
  29.         }
  30.     }
  31.     return le;
  32. }
  33.  
  34. void quickSort(int v[], int le, int ri) {
  35.     if (le < ri) {
  36.         int mid = (le + ri) / 2;
  37.         swap(&v[le], &v[mid], sizeof(int));
  38.         int i = le, j = ri, d = 0;
  39.         while (i < j) {
  40.             if (v[i] > v[j]) {
  41.                 swap(&v[i], &v[j], sizeof(int));
  42.                 d = 1 - d;
  43.             }
  44.             i += d;
  45.             j -= 1 - d;
  46.         }
  47.         quickSort(v, le, i - 1);
  48.         quickSort(v, i + 1, ri);
  49.     }
  50. }
  51.  
  52. void printArr(int n, int v[]) {
  53.     for (int i = 0; i < n; i++) {
  54.         printf("%d ", v[i]);
  55.     }
  56.     puts("");
  57. }
  58.  
  59. int main(void) {
  60.     int v[N] = {-2, 3, 4, -3, 1, -1};
  61.     int fiPos = moveToBeg(N, v);
  62.     printArr(N, v);
  63.     quickSort(v, fiPos, N - 1);
  64.     printArr(N, v);
  65.     return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement