以下函数的排序问题是什么,为什么跟预期不同,要怎么改?

void rank_r_salary(char uid[10][5],int r_salary[10])
{
/********** Begin /
char item[5],x[10][5];
int i,j,temp,k;
for(i=0;i<10;i++)
for(j=0;j<5;j++)
x[i][j]=uid[i][j];
printf("代号: 实发工资:\n");
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(r_salary[i]<r_salary[i+1])
{
temp=r_salary[i];
r_salary[i]=r_salary[i+1];
r_salary[i+1]=temp;
for(k=0;k<5;k++)
{
item[k]=x[i][k];
x[i][k]=x[i+1][k];
x[i+1][k]=item[k];
}
}
for(i=0;i<10;i++)
printf("%-10s%-10d\n",x[i],r_salary[i]);
/
End /
}
void rank_t_salary_id(char uid[10][5], int t_salary[10], int rid[10])
{
/
Begin /
int i,j,temp,a,b;
int T_salary[10];
for(i=0;i<10;i++)
T_salary[i]=t_salary[i];
printf("代号: 应发工资:名次: \n");
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(t_salary[i]<t_salary[i+1]){
temp=t_salary[i];
t_salary[i]=t_salary[i+1];
t_salary[i+1]=t_salary[i];
}
for(j=0;j<10;j++)
{
b=T_salary[j];
for(i=0;i<10;i++)
if(b==t_salary[i])
{
a=i+1;
break;
}
rid[j]=a;
}
for(i=0;i<10;i++)
printf("%-10s%-10d%-10d\n",uid[i],T_salary[i],rid[i]);
/
End **********/
}

img


为什么实际排序会跟预期的不同?

img


这是题目

修改如下,共参考:

#include <stdio.h>
void rank_r_salary(char uid[10][5], int r_salary[10]) 
{
    ///********** Begin
    int i = 0, j, max = 0, temp, ttmp[10];
    char* tmp[10], * ptmp;
    for (i = 0; i < 10; i++){
        tmp[i] = uid[i];
        ttmp[i] = r_salary[i];
    }
    for (i = 0; i < 10 - 1; i++)
    {
        max = i; 
        for (j = i + 1; j < 10; j++)
        {
            if (ttmp[j] > ttmp[max])
                max = j;
        }
        if (max != i) 
        {
            temp = ttmp[i];
            ttmp[i] = ttmp[max];
            ttmp[max] = temp;
            ptmp = tmp[i];
            tmp[i] = tmp[max];
            tmp[max] = ptmp;
        }    
    }
    printf("代号: 实发工资:\n");
    for (i = 0; i < 10; i++) {
        printf("%s\t%d\n", tmp[i], ttmp[i]);
    }
    ///********** End *********
}
void rank_t_salary_id(char uid[10][5], int t_salary[10],int rid[10]) 
{
    ///** Begin *********
    int i, j, tmp;
    for (i = 0; i < 10; i++) //rid[]数组初始化
        rid[i] = 0;
    for (i = 0; i < 10 - 1; i++)
        for (j = i + 1; j < 10; j++)
            if (t_salary[i] == t_salary[j]) rid[j]++;
    for (i = 0; i < 10; i++)
    {
        for (j = 0, tmp = 1; j < 10; j++)
            if (t_salary[i] < t_salary[j])
                tmp++;
        rid[i] += tmp;
    }
    printf("代号: 应发工资:名次:\n");
    for (i = 0; i < 10; i++) {
        printf("%s\t%d\t%d\n", uid[i], t_salary[i], rid[i]);
    }
    ///********** End *********
}
int main()
{
    char a[10][5] = { "U01","U02","U03","U04","U05","U06","U07","U08","U09","U10" };
    int b[10] = { 2200,2400,2700,2200,3000,3700,3400,4200,2800,5600 };
    int c[10] = { 2003,2218,2449,2030,2760,3418,3133,3964,2589,5284 };
    int d[10] = { 0 };

    rank_r_salary(a, c);
    rank_t_salary_id(a, b, d);
    return 0;
}