能不能解释一下这个代码排序的原理
{
int ranking[n][2];
for (int i = 0; i < n; i++)
{
ranking[i][0]=score[i][0];
ranking[i][1]=score[i][1];
}
if (m==3)
{
int j=1;
while (j)
{
j=0;
for (int i = 0; i < n-1; i++)
{
if (ranking[i][1]<ranking[i+1][1])
{
int t=ranking[i][1],s=ranking[i][0];
ranking[i][1]=ranking[i+1][1];
ranking[i][0]=ranking[i+1][0];
ranking[i+1][1]=t;
ranking[i+1][0]=s;
j++;
}
}
}
for (int i = 0; i < n; i++)
{
printf("No.%d: %02d %d\n",i+1,ranking[i][0],ranking[i][1]);
}
}
else
{
int j=1;
while (j)
{
j=0;
for (int i = 0; i < n-1; i++)
{
if (ranking[i][1]>ranking[i+1][1])
{
int t=ranking[i][1],s=ranking[i][0];
ranking[i][1]=ranking[i+1][1];
ranking[i][0]=ranking[i+1][0];
ranking[i+1][1]=t;
ranking[i+1][0]=s;
j++;
}
}
}
for (int i = 0; i < n; i++)
{
printf("No.%d: %02d %d\n",n-i,ranking[i][0],ranking[i][1]);
}
}
}
中间一大块就是数组元素的交换,主要的技巧就是while(j)循环。每次循环都将整个数组从头到尾比较一遍,如果有需要交换的元素,那么j就加1,使得j不为0,循环继续。如果没有元素交换,表明排序结束,这时由于while开头部分把j设置为0,使得while循环结束