对于数据我之前的代码可以AC
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int a = 0;//储存无用返回值(去警告)
char num[25][15] = { 0 };
int judge(int sit1, int sit2)
{
//判断
int length1 = (int)strlen(num[sit1]);
int length2 = (int)strlen(num[sit2]);
for (int i = 0; i < length1 && i < length2; i++)
{
if (num[sit1][i] - num[sit2][i] > 0)
{
return 1;
}
else if (num[sit1][i] - num[sit2][i] == 0)
{
continue;
}
else
{
return 0;
}
}
//特判
if ((length1 > 0 && length1 < length2 && num[sit1][length1 - 1] - num[sit2][length1] > 0) ||
(length2 > 0 && length1 > length2 && num[sit1][length2] - num[sit2][length2 - 1] > 0))
{
return 1;
}
else
{
return 0;
}
}
void exchange(int sit1, int sit2)
{
//交换
char tmp[15] = { 0 };
strcpy(tmp, num[sit1]);
strcpy(num[sit1], num[sit2]);
strcpy(num[sit2], tmp);
}
void sort(int left, int right)
{
//是否结束
if (left >= right)
{
return;
}
//排序
int begin = left;
int end = right;
int key = begin;
while (begin < end)
{
//另一端好的
while (end > begin)
{
if (judge(end, key))
{
break;
}
end--;
}
//key一端坏的
while (begin > end)
{
if (judge(key, begin))
{
break;
}
begin++;
}
//交换
if (begin < end)
{
exchange(begin, end);
}
}
//key交换
if (key < end)
{
exchange(key, end);
}
//继续
sort(left, begin - 1);
sort(end + 1, right);
}
int main()
{
int n = 0;
//数据个数
a = scanf("%d", &n);
a = getchar();
//数据
for (int i = 1; i <= n; i++)
{
a = scanf("%s", &num[i]);
a = getchar();
}
//排序
sort(1, n);
//输出
for (int i = 1; i <= n; i++)
{
printf("%s", num[i]);
}
printf("\n");
return 0;
}
但当输入为:
2
23 2324
我的代码输出结果为23 2324,但正确结果为2324 23