Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <ctime>
- #define _CRT_SECURE_NO_WARNINGS
- int * generate(int* n)
- {
- int * arr = (int *)malloc((*n) * sizeof(int));
- for (int i = 0; i < *n; ++i)
- {
- arr[i] = rand();
- }
- return arr;
- }
- int compare(void *a, void *b)
- {
- return(*(int*)a - *(int*)b);
- }
- typedef int(*PCmp)(void *, void*);
- int partition(void * a, int l, int r, int sz, PCmp cmp)
- {
- char *carr = (char *)a;
- int i = l - 1;
- void *ptmp = malloc(sz);
- for (int j = l; j < r - 1; ++j)
- {
- if (cmp(carr + j*sz, carr + (r-1)*sz) <= 0)
- {
- i++;
- memcpy(ptmp, carr + i*sz, sz);
- memcpy(carr + i*sz, carr + j*sz, sz);
- memcpy(carr + j*sz, ptmp, sz);
- }
- }
- memcpy(ptmp, carr + (i + 1)*sz, sz);
- memcpy(carr + (i + 1)*sz,carr + (r-1)*sz, sz);
- memcpy(carr + (r - 1)*sz, ptmp, sz);
- return i + 1;
- }
- void qsort(int *a, int l, int r)
- {
- if (l >= r)
- return;
- int q = partition(a, l, r, sizeof(int), compare);
- qsort(a, l, q);
- qsort(a, q + 1, r);
- }
- int main()
- {
- srand(time(NULL));
- int n = 0, t = 0;
- scanf("%d", &n);
- int* arr = generate(&n);
- qsort(arr, 0, n);
- /*for (int i = 0; i < n; i++)
- {
- printf("%d ", arr[i]);
- }*/
- for (int i = 1; i < n; i++)
- {
- if (arr[i - 1] > arr[i])
- {
- printf("ERROR %d %d\n", arr[i - 1], arr[i]);
- t++;
- }
- }
- if (!t)
- {
- printf("OK\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment