Skip to content

Instantly share code, notes, and snippets.

@volgar1x
Last active August 29, 2015 14:16
Show Gist options
  • Save volgar1x/d2b07626c995ab330a4c to your computer and use it in GitHub Desktop.
Save volgar1x/d2b07626c995ab330a4c to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int* head;
int len;
} int_array;
void arr_alloc(int_array* arr) {
arr->head = (int*) malloc(sizeof(int) * arr->len);
}
void arr_read(int_array* arr, char* name, int len) {
int i, input;
if (len <= 0) {
printf("Entrez la taille du tableau \"%s\" : ", name);
scanf("%d", &arr->len);
} else {
arr->len = len;
}
arr_alloc(arr);
for (i = 0; i < arr->len; i++) {
printf("Entrez %s[%d] (plus que %d): ", name, i, arr->len - i);
scanf("%d", &input);
arr->head[i] = input;
}
}
void arr_write(int_array arr, char* name) {
int i;
printf("%s{", name);
for (i = 0; i < arr.len; i++) {
if (i > 0) {
printf(", ");
}
printf("%d", arr.head[i]);
}
printf("}\n");
}
int_array arr_dup(int_array arr) {
int i;
int_array res;
res.len = arr.len;
arr_alloc(&res);
for (i = 0; i < res.len; i++) res.head[i] = arr.head[i];
return res;
}
int_array arr_concat(int_array arr1, int_array arr2) {
int i;
int_array res;
res.len = arr1.len + arr2.len;
arr_alloc(&res);
for (i = 0; i < arr1.len; i++) {
res.head[i] = arr1.head[i];
}
for (i = 0; i < arr2.len; i++) {
res.head[arr1.len + i] = arr2.head[i];
}
return res;
}
void arr_swap(int_array* arr, int a, int b) {
int tmp = arr->head[a];
arr->head[a] = arr->head[b];
arr->head[b] = tmp;
}
void arr_bubblesort(int_array* arr) {
int i, len = arr->len;
for (len = arr->len; len > 1; len--) {
for (i = 0; i < len - 1; i++) {
if (arr->head[i] > arr->head[i + 1]) {
arr_swap(arr, i, i + 1);
}
}
}
}
int_array arr_mergesort(int_array arr1, int_array arr2) {
int_array res = arr_concat(arr1, arr2);
arr_bubblesort(&res);
return res;
}
void arr_sort(int_array* arr) {
arr_bubblesort(arr);
}
int main(int argc, char** argv) {
int_array arr1, arr2;
arr_read(&arr1, "arr1", 0);
arr_read(&arr2, "arr2", 0);
arr_write(arr1, "arr1");
arr_write(arr2, "arr2");
arr_write(arr_mergesort(arr1, arr2), "result");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment