2013-05-16 3 views
0

Я начинаю уроки языка C, в частности, функции. Моя задача - сортировать структуру массивов по числовому значению, в этом случае это значение переменной «возраст».Функция сортировки пузырьков в C

Я не уверен, как должен прототип принимать правильные аргументы и куда идти оттуда. Было бы высоко оценено некоторые рекомендации. Заранее спасибо.

#include <stdio.h> 
#include <stdlib.h> 

#define STUDENTS 5   //Maximum number of students to be saved. 
#define LENGTH 20    //Maximum length of names. 

struct person {      //Setting up template for 'person' 
    char first[LENGTH]; 
    char last[LENGTH]; 
    int age; 
}; 

void bubblesort(int, int);     //Prototyping function for sorting structures. 

int main(void) { 

struct person student[STUDENTS] = {  //Array of person structures. 

    {"Person", "One", 21}, 
{"Person", "Two", 18}, 
{"Person", "Three",20}, 
{"Person", "Four", 17}, 
{"Person", "Five", 16} 
}; 

int i;  //For loop counter. 
int n=5; //For loop variable. N is equal to the # of entries in the struct. 

printf("Here is an unsorted list of students: \n"); 
for(i=0; i<n; i++) 
    printf("%s %s is %d years old. \n", student[i].first, student[i].last, student[i].age); 


//Sort students by age. 
//Print sorted list. 

return 0; 
} 
+0

'недействительным BubbleSort (int, int); 'параметр' int, int' ?? Что вы сортируете? – BLUEPIXY

+0

Я сортирую веки, так что 21, 18, 20, 17, 16. Как я уже сказал, я не совсем уверен, как сказать функции принять эти аргументы. – alldavidsluck

+1

Например, 'void bubblesort (struct person [], int start_index, int end_index);' Обращение к qsort Если вы находитесь в чем-то общем. – BLUEPIXY

ответ

0

Если вы хотите, чтобы отсортировать данные структуры, основанные на поле возраста, то вы можете использовать следующий код,

struct person temp; 

for(i=0; i<STUDENTS; i++) 
{ 
    for(j=i; j<STUDENTS; j++) 
    { 
    if(stud[i].age < stud[j].age) 
    { 
     temp = stud[i]; 
     stud[i] = stud[j]; 
     stud[j] = temp; 
    } 
    } 
} 

Для того, чтобы достичь этого можно передать структуру посредством ссылки следующим образом ,

void bubble(struct person * stud); 

прототип функции void bubble(struct person *);

+0

Спасибо. «Пустотный пузырь» (struct person * stud); это то, что мне действительно нужно, но увидеть весь цикл очень помогает. – alldavidsluck

Смежные вопросы