#define _CRT_SECURE_NO_WARNINGS 

#include  <stdio.h>

#include <stdlib.h>

#include <string.h>


void merge(char arr[][501], int l, int m, int r) {

int i = l;

int j = m + 1;

int c = l;

char** arr2 = (char**)malloc(sizeof(char*) * (r + 2));

for (int i = 0; i < r+1; i++) {

arr2[i] = (char*)malloc(sizeof(char) * (501));

}

while (i <= m && j <= r) {

if (strlen(arr[i])>strlen(arr[j])) {

strcpy(arr2[c], arr[j]);

c++; j++;

}

else if (strlen(arr[i]) < strlen(arr[j])) {

strcpy(arr2[c], arr[i]);

c++; i++;

}

else

{

if (arr[i] > arr[j]) {

strcpy(arr2[c], arr[i]);

c++; i++;

}

else {

strcpy(arr2[c], arr[j]);

c++; j++;

}

}

}

while (i <= m) {

strcpy(arr2[c], arr[i]);

c++; i++;

}

while (j <= r) {

strcpy(arr2[c], arr[j]);

c++; j++;

}

for (int k = l; k <= r; k++)

{

strcpy(arr[k], arr2[k]);

}

free(arr2);


}

void mergesort(char arr[][501], int l, int r) {

if (l < r) {

int m = (l + r) / 2;

mergesort(arr, l, m);

mergesort(arr, m + 1, r);

merge(arr, l, m, r);

}

}

int main() {

int n = 0;

int m = 0;

scanf("%d", &n);

char** list = (char**)malloc(sizeof(char*) * (n + 1));

for (int i = 0; i < n; i++) {

list[i] = (char*)malloc(sizeof(char) * (501));

}

for (int i = 0; i < n; i++) {

scanf("%s", list[i]);


}

mergesort(list, 0, n - 1);

printf("======\n");

for (int i = 0; i < n; i++) {

printf("%s\n", list[i]);

}


}



이거 뭐가 잘못된거에여?

병합정렬 구현중인데