#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]);
}
}
댓글 0