#include <stdio.h>
#include <string.h>
void sort_names();
struct ListNames {
char names[20];
int age;
}n[6] = {
{"Ryan, Elizabeth",62},
{"McIntyre, Osborne",84},
{"DuMond, Kristin",18},
{"Larson, Lois",42},
{"Thorpe, Trinity",15},
{"Ruiz, Pedro",35},
};
int main (void) {
int i;
printf("Original List");
printf("\n-----------------------------");
for (i = 0; i < 6; i++) {
printf("\n%-20s",n[i].names);
printf(" %2i",n[i].age);
}
}
我试图按字母顺序对结构中的字符串进行排序,并使用字符串对int进行排序。我能够很好地打印它,但是我对于调用结构按字母顺序排序它时接下来要做什么一无所知。我知道我需要一个索引值,但我不知道如何在一个结构中做到这一点。
答案 0 :(得分:1)
你可以迭代你的整个列表,同时跟踪最小的元素。最小的我的意思是名称。然后元素(名称和年龄)由第一个位置的元素交换。然后第二个最小的元素被替换为第二位的元素也是类似的。
int is_smaller(char *a,char *b)//returns true if a<b
{
if(strcmp(a,b)<0)
return 1;
else
return 0;
}
void swap(char* a,char* b)//to swap names
{
char arr[100];
strcpy(arr,a);
strcpy(a,b);
strcpy(b,arr);
}
void swap(int &a,int &b)//to swap age
{
int temp=a;
a=b;
b=temp;
}
int smallest;
for(int i=0;i<6;i++)
{
smallest=i;
for(int j=i+1;j<6;j++)
if(!is_smaller(n[smallest].names,n[j].names))//is smaller return true if first argument is smaller than second
{
smallest=j;
}
if(smallest!=i)
{
swap(n[i].names,n[smallest].names);
swap(n[i].age,n[smallest].age);
}
}