문자열 입력받아서 병합정렬하려고하는데


잘안되네요


해결해주시면 사례하겠습니다.





#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]);


}




}