gpt4 book ai didi

objective-c - 使用 Cocoa 类进行冒泡排序

转载 作者:行者123 更新时间:2023-12-03 16:58:45 28 4
gpt4 key购买 nike

我正在尝试使用 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]);`

所以在终端的输出中我看到了这个:

==未排序==


7
49
73
58
30
72
44
78
23
9

==已排序==

23
7
49
73
58
30
72
44
78
9

我无法理解为什么它不从索引 9 开始?正如我所看到的,它从索引8(取整数23)开始排序,然后转到索引1。但是当他在索引1处遇到整数7时,为什么它被替换为整数23,它不符合循环for()的条件? ??.. 在 C++ 上也完全相同的算法,没有类和 OOP 的东西效果很好,所以我猜算法在那里是正确的。请大家帮助理解这一点,我花了半天的时间:))提前非常感谢您的回答。

最佳答案

  1. 您只进行了一次冒泡排序,这不足以对数组进行完全排序。
  2. 您的数组充满了字符串,而不是数字,因此“9”位于“78”之后,就像“z”位于“xy”之后一样。

关于objective-c - 使用 Cocoa 类进行冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9179136/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com