Bubble sort с классами какао - PullRequest
       21

Bubble sort с классами какао

1 голос
/ 07 февраля 2012

Я пытаюсь сделать пузырьковую сортировку, используя классы Какао, но я нашел некоторые проблемы. вот код:

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSMutableArray *array=[[NSMutableArray alloc] init];

int a,b;
for (int i=0;i<10;i++) {
    int newElement=rand()%100;
    [array addObject:[NSString stringWithFormat:@"%d",newElement]]; 
    NSLog(@"%i %@",i,[array objectAtIndex:i]);
}
[array addObject:[NSNull null]];

/*for (int a=1;a<10;a++){ */
//===Problem exact in this place
    for (int i=9;i>=1;i--) {
        NSNumber *tmp1=[array objectAtIndex:i]; //9
        NSNumber *tmp2=[array objectAtIndex:i-1]; //8
        if ([[array objectAtIndex:i] compare:[array objectAtIndex:i-1]]==NSOrderedAscending) { //if ([obj1 integerValue] > [obj2 integerValue]) this is -NSOrderedDescending;   
            [tmp1 retain];
            [array replaceObjectAtIndex:i-1 withObject:tmp1];
            [array replaceObjectAtIndex:i withObject:tmp2];
            [tmp1 release];
        }

    }

`NSLog(@"\n==SORTED==\n"); 
for (int i=0;i<10;i++) NSLog(@"%i %@",i,[array objectAtIndex:i]);`

Таким образом, в выводе в терминале я вижу это:

== НЕСОРТИРОВАННАЯ ==

7 49 73 58 30 72 44 78 23 9

== SORTED ==

23 7 49 73 58 30 72 44 78 9

Не могу понять, почему он не начинается с индекса 9? Как я вижу, он начинает сортировку с индекса 8 (принимает целое число 23) и переходит к индексу 1. Но когда он встречает целое число 7 с индексом 1, почему он заменяется на целое число 23, это не соответствует условию окружности для ()? ?? .. Точно такой же алгоритм на C ++ без классов и ООП отлично работает, так что я думаю, что алгоритм там правильный. Пожалуйста, ребята, помогите понять это, я потратил на это полдня :)) Заранее большое спасибо за ответы.

1 Ответ

3 голосов
/ 07 февраля 2012
  1. Вы выполняете только один проход сортировки по пузырькам, что недостаточно для полной сортировки массива.
  2. Ваш массив полон строк, а не чисел, поэтому «9» следует после «78», точно так же, как «z» следует после «xy».
...