使用指针数组保存帽子颜色,进行字符串的索引排序,提高字符串排序的效率。

索引排序修改了指针数组中指向帽子具体颜色的指针指向,实际存储中帽子颜色顺序并没有改变

#include<stdio.h>
#include<string.h>

#define N 100
#define MAX_LEN 10

// 使用简单选择排序,根据小鼠重量排序,对重量排序的同时,改变小老鼠对应的帽子颜色的位置
// 使用指针数组保存帽子颜色,排序仅修改了指针数组中指向帽子具体颜色的指针指向
// 实际存储中帽子颜色并没有改变
void SortDesc(int weight[],char *str[],int n){
    int i,j,k,temp;
    char *color=NULL;
    for(i=0;i<n-1;i++){
        k=i;
        for(j=i+1;j<n;j++){
            if(weight[j] > weight[k]){
                k=j;
            }
        }
        if(i!=k){
            temp = weight[i];
            color = str[i];
            weight[i]=weight[k];
            str[i] = str[k];
            weight[k]=temp;
            str[k] = color;
        }
    }
}

int main(){
    int n;
    int weight[N];
    char colors[N][MAX_LEN];
    char *str[N];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
// 需要先对指针数组中每个指针指向的内存地址进行初始化,才能对该指针指向的内存地址进行写入
        str[i] = colors[i];  
        scanf("%d %s",&weight[i],colors[i]);
    }
    SortDesc(weight,str,n);
    for(int i=0;i<n;i++){
        printf("%s\n",str[i]);
    }
    
}