#include <stdio.h>
#include <stdlib.h>
void merge(int* A, int n, int mid){
int *temp
= (int*)malloc(sizeof(int)*n
); //set indexes for left and right side of array and
//the beginning of the temporary array
int array_index = 0; //temporary array
int left = 0; //left side
int right = mid;
while(left < mid && right < n){
if(A[left] <= A[right]){
temp[array_index] = A[left];
left++;
array_index++;
}else {
temp[array_index] = A[right];
right++;
array_index++;
}
}
while(left < mid){
temp[array_index] = A[left];
left++;
array_index++;
}
while(right< n){
temp[array_index] = A[right];
right++;
array_index++;
}
for(int i = 0; i<n; i++){
A[i] = temp[i];
}
}
void merge_sort(int *A, int n){
if(n>=2){
int mid = n/2;
merge_sort(A,mid);
merge_sort(A+mid,n-mid);
merge(A, n, mid);
}
}
int main(void) {
int arr[10] = {1,5,3,13,88,21,55,23,99,1};
merge_sort(arr, 10);
for(int i = 0; i<10; i++){
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnZvaWQgbWVyZ2UoaW50KiBBLCBpbnQgbiwgaW50IG1pZCl7CiAgaW50ICp0ZW1wID0gKGludCopbWFsbG9jKHNpemVvZihpbnQpKm4pOwogIC8vc2V0IGluZGV4ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHNpZGUgb2YgYXJyYXkgYW5kIAogIC8vdGhlIGJlZ2lubmluZyBvZiB0aGUgdGVtcG9yYXJ5IGFycmF5CiAgaW50IGFycmF5X2luZGV4ID0gMDsgLy90ZW1wb3JhcnkgYXJyYXkKICBpbnQgbGVmdCA9IDA7IC8vbGVmdCBzaWRlCiAgaW50IHJpZ2h0ID0gbWlkOwoKICB3aGlsZShsZWZ0IDwgbWlkICYmIHJpZ2h0IDwgbil7CiAgICBpZihBW2xlZnRdIDw9IEFbcmlnaHRdKXsKICAgICAgdGVtcFthcnJheV9pbmRleF0gPSBBW2xlZnRdOwogICAgICBsZWZ0Kys7CiAgICAgIGFycmF5X2luZGV4Kys7CiAgICB9ZWxzZSB7CiAgICAgIHRlbXBbYXJyYXlfaW5kZXhdID0gQVtyaWdodF07CiAgICAgIHJpZ2h0Kys7CiAgICAgIGFycmF5X2luZGV4Kys7CiAgICB9CiAgfQogICB3aGlsZShsZWZ0IDwgbWlkKXsKICAgIHRlbXBbYXJyYXlfaW5kZXhdID0gQVtsZWZ0XTsKICAgIGxlZnQrKzsKICAgIGFycmF5X2luZGV4Kys7CiAgfQogIHdoaWxlKHJpZ2h0PCBuKXsKICAgIHRlbXBbYXJyYXlfaW5kZXhdID0gQVtyaWdodF07CiAgICByaWdodCsrOwogICAgYXJyYXlfaW5kZXgrKzsKICB9CiBmb3IoaW50IGkgPSAwOyBpPG47IGkrKyl7CiAgICBBW2ldID0gdGVtcFtpXTsKICB9CiAgZnJlZSh0ZW1wKTsKfQoKdm9pZCBtZXJnZV9zb3J0KGludCAqQSwgaW50IG4pewogICAgaWYobj49Mil7CiAgICBpbnQgbWlkID0gbi8yOwogICAgbWVyZ2Vfc29ydChBLG1pZCk7CiAgICBtZXJnZV9zb3J0KEErbWlkLG4tbWlkKTsKICAgIG1lcmdlKEEsIG4sIG1pZCk7CiAgfQp9CgppbnQgbWFpbih2b2lkKSB7CiAgaW50IGFyclsxMF0gPSB7MSw1LDMsMTMsODgsMjEsNTUsMjMsOTksMX07CiAgbWVyZ2Vfc29ydChhcnIsIDEwKTsKICBmb3IoaW50IGkgPSAwOyBpPDEwOyBpKyspewogICAgcHJpbnRmKCIlZCAiLGFycltpXSk7CiAgfQogIHJldHVybiAwOwp9