Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- void sort1(int* a, int n)
- {
- for (int i = 0; i < n; i++)
- {
- int j = i;
- while ((j > 0) && (a[j] < a[j-1]))
- {
- int c = a[j];
- a[j] = a[j-1];
- a[j-1] = c;
- j-=1;
- }
- }
- }
- void merge(int *a, int left, int middle, int right)
- {
- int *res = (int*) malloc(sizeof(int) * (right - left+1));
- int il = 0, ir = 0;
- while ((left + il < middle) && (middle + ir < right))
- {
- if (a[left + il] < a[middle + ir])
- {
- res[il + ir] = a[left + il];
- il++;
- }
- else
- {
- res[il + ir] = a[middle + ir];
- ir++;
- }
- }
- while (left + il < middle)
- {
- res[il + ir] = a[left + il];
- il++;
- }
- while (middle + ir < right)
- {
- res[il + ir] = a[middle + ir];
- ir++;
- }
- for (int i = 0; i < il + ir; i++)
- a[i+left] = res[i];
- free(res);
- }
- void sort2(int *a, int left, int right)
- {
- if (left + 1 < right)
- {
- int m = (left + right) / 2;
- sort2(a, left, m);
- sort2(a, m+1, right);
- merge(a, left, m, right);
- }
- }
- int *readf(int *n)
- {
- FILE *f = fopen("input.txt", "r");
- int *a;
- if (f != NULL)
- {
- fscanf(f, "%d", n);
- a = (int*) malloc(*n*sizeof(int));
- for (int i = 0; i < *n; i++)
- fscanf(f, "%d", &a[i]);
- fclose(f);
- }
- return a;
- }
- void writef(int *a, int n)
- {
- FILE *f = fopen("out.txt", "w");
- fprintf(f, "%d ", n);
- for (int i = 0; i < n; i++)
- fprintf(f, "%d ", a[i]);
- fclose(f);
- }
- int main()
- {
- int n = 0;
- int *arr = readf(&n);
- sort1(arr, n);
- writef(arr, n);
- arr = readf(&n);
- sort2(arr, 0, n-1);
- writef(arr, n);
- free(arr);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement