Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Merge sort was taken from https://www.geeksforgeeks.org/c-program-for-merge-sort/
- #include <stdio.h>
- #include <stdlib.h>
- #include <limits.h>
- struct Pair
- {
- int key;
- int value;
- };
- void merge(struct Pair* data, size_t left,
- size_t center, size_t right) {
- struct Pair left_arr[center - left + 1];
- struct Pair right_arr[right - center];
- for (size_t i = 0; i < center - left + 1; ++i) {
- left_arr[i].key = data[left + i].key;
- left_arr[i].value = data[left + i].key;
- }
- for (size_t i = 0; i < right - center; ++i) {
- right_arr[i].key = data[center + i + 1].key;
- right_arr[i].value = data[center + i + 1].value;
- }
- size_t i = 0, j = 0;
- while (i < center - left + 1 && j < right - center) {
- if (left_arr[i].key <= right_arr[i].key) {
- data[center].key = left_arr[i].key;
- data[center].value = left_arr[i].value;
- ++i;
- } else {
- data[center].key = right_arr[j].key;
- data[center].value = right_arr[j].value;
- ++j;
- }
- ++center;
- }
- while (i < center - left + 1) {
- data[center].key = left_arr[i].key;
- data[center].value = left_arr[i].value;
- ++center;
- ++i;
- }
- while (j < right - center) {
- data[center].key = right_arr[j].key;
- data[center].value = right_arr[j].value;
- ++center;
- ++j;
- }
- }
- void merge_sort(struct Pair *data, size_t left, size_t right) {
- if (left < right) {
- size_t center = left + (right - left) / 2;
- merge_sort(data, left, center);
- merge_sort(data, center + 1, right);
- merge(data, left, center, right);
- }
- }
- void process(struct Pair *data, size_t size) {
- if (size == 0) return;
- merge_sort(data, 0, size - 1);
- }
- int main() {
- size_t n;
- struct Pair data[10];
- scanf("%lu", &n);
- for (size_t i = 0; i < n; ++i)
- scanf("%d %d", &data[i].key, &data[i].value);
- process(data, n);
- for (size_t i = 0; i < n; ++i)
- printf("key: %d; value: %d\n", data[i].key, data[i].value);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement