我的一个练习是10个字符串,我必须排序 事实上,数组是随机顺序,每个元素都有一个表示球的字符(G =绿色,R =红色,B =蓝色)。
我必须对这个数组进行排序,这样所有的R球都会到达数组的开头,G到结尾,蓝色在中间。
此外,我必须以低时间复杂度和内存复杂性来做到这一点。
我试过这个,但我成功的只是把红球放在阵列的乞讨中。
这是我的代码:
char arr[10] = {
'R', 'G', 'B',
'G', 'G', 'R',
'B', 'R', 'G',
'B'
};
for (int i = 0, j = 10; i < 10-1, j > i; i++, j--)
{
for (int k = 0; k < 10; k++)
{
if (arr[k] == 'R')
{
char temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
if (arr[k] == 'G')
{
char temp2 = arr[j];
arr[j] = arr[k];
arr[k] = arr[j];
}
}
}
答案 0 :(得分:2)
由于数组中元素的域非常有限,您可以使用counting sort的简化形式轻松解决此问题。
答案 1 :(得分:1)
您只有三种颜色,因此您的阵列中会有重复。在这种情况下,使用这些比使用原始位置更容易。只计算有多少红色,蓝色和绿色,然后将其中的许多都写入阵列。
答案 2 :(得分:0)
编辑后应该可以正常使用
for (int i = 0, j = 9; i < 10-1, j > 1; i++, j--)