Как кодировать Bubble sort для массива объектов в Objective C lang.? - PullRequest
0 голосов
/ 04 ноября 2011

Я написал нижеприведенную функцию для сортировки (пузыря) массива объектов в соответствии с максимальным средним баллом.

Обратите внимание, что tmp является объектом класса Student , который включает в себя (имя, возраст, средний балл), есть еще один цикл для вывода результата.

Но, это не Сортировка (Не Функционально), Нет ошибок, просто не работает, пожалуйста, Помогите ... т.е.: вывод: результат не отсортирован

+(void) SortAndPrintBubble:(NSMutableArray *) tosort{

    Student * tmp = [Student new];
    for (int i = [tosort count] - 1; i >=0; i--) {

        for (int j =1; j<=i; j++) {
            if ([[tosort objectAtIndex:(j-1)] GetGPA] > [[tosort objectAtIndex:j] GetGPA]) {
                tmp = [tosort objectAtIndex:(j-1)];
                [tosort insertObject:(id)[tosort objectAtIndex:(j-1)] atIndex:(NSUInteger)j];
                [tosort replaceObjectAtIndex:j withObject:(id)tmp];
            }
        }

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Вы можете просто написать метод для своего класса Student, чтобы сравнить GPA,

-(NSComparisonResult) compareGPA:(Student*)otherStudent;

, затем вы можете просто отсортировать NSMutableArray (предполагая, что это массив, полный объектов Student), вызвав

[tosort sortUsingSelector:@selector(compareGPA:)];

вы также можете использовать блоки, если вы нацелены на iOS 4+, с методом

- (void)sortUsingFunction:(NSInteger (*)(id, id, void *))compare context:(void *)context

Этот пост SO подробно описывает доступные опции.

0 голосов
/ 04 ноября 2011

Вы не должны использовать insertObject:atIndex:.Используйте replaceObjectAtIndex:withObject: в обеих строках.

И первый из двух вызовов replaceObject... должен использовать objectAtIndex:j, а не j-1, и установить значение на индекс j-1, а не j.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...