使用指针数组保存帽子颜色,进行字符串的索引排序,提高字符串排序的效率。
索引排序修改了指针数组中指向帽子具体颜色的指针指向,实际存储中帽子颜色顺序并没有改变
#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]);
}
}