Objective c 带有Cocoa类的冒泡排序

Objective c 带有Cocoa类的冒泡排序,objective-c,cocoa,sorting,bubble-sort,Objective C,Cocoa,Sorting,Bubble Sort,我试图使用Cocoa类进行冒泡排序,但发现了一些问题。代码如下: #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

我试图使用Cocoa类进行冒泡排序,但发现了一些问题。代码如下:

#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]);`
#导入
int main(int argc,const char*argv[]{
NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init];
NSMUTABLEARRY*array=[[NSMUTABLEARRY alloc]init];
INTA,b;
对于(int i=0;i[obj2 integerValue]),这是一种去递归;
[tmp1保留];
[数组替换对象索引:i-1,对象:tmp1];
[array replaceObjectAtIndex:i with object:tmp2];
[tmp1释放];
}
}
`NSLog(@“\n==排序==\n”);
对于(int i=0;i
  • 您只进行了一次冒泡排序,这不足以对数组进行完全排序
  • 数组中充满了字符串,而不是数字,所以“9”在“78”之后,就像“z”在“xy”之后一样

  • 非常感谢。你说得对!我用NSNumber的对象填充了我的数组,现在工作正常。我更改了此部分:int newElement=rand()%100;[array addObject:[NSNumber numberWithInteger:newElement]];感谢您的回答)