选择排序结构上的字符串

时间:2014-11-25 19:52:57

标签: c sorting struct

#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进行排序。我能够很好地打印它,但是我对于调用结构按字母顺序排序它时接下来要做什么一无所知。我知道我需要一个索引值,但我不知道如何在一个结构中做到这一点。

1 个答案:

答案 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);
    }
}