我正在尝试根据textFields
对frame.origin.y
数组进行排序。但是,当我运行模拟器时,它卡住了。有什么想法吗?
IBOutletCollection(UITextField) NSArray *textFields
我的代码:
-(NSMutableArray *)bubbleSort:(NSMutableArray *) unsortedArray{
NSInteger i,j;
//NSLog(@"%@",unsortedArray);
for(i=0;i<unsortedArray.count;i++)
{
for(j=0;j<i;j++)
{
if(((UITextField *)[unsortedArray objectAtIndex:i]).frame.origin.y > ((UITextField *)[unsortedArray objectAtIndex:j]).frame.origin.y)
{
UITextField *temp=[unsortedArray objectAtIndex:i];
[unsortedArray insertObject:[unsortedArray objectAtIndex:j] atIndex:i];
[unsortedArray insertObject:temp atIndex:j];
}
}
}
//NSLog(@"%@",unsortedArray);
return unsortedArray;
}
答案 0 :(得分:2)
看起来这将继续在数组中插入对象。所以unsortedArray.count会不断增加。在我看来,你需要首先删除对象,然后根据算法将其插入上级或低级。
用于NSMutableArray插入对象函数的文档。
答案 1 :(得分:2)
就像Learner所说,你只是继续在你的数组中插入对象,所以你永远不会离开你的外部for循环。要交换两个元素,可以使用
- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2
所以在你的情况下,在if
内,你可以简单地写
[unsortedArray exchangeObjectAtIndex:i withObjectAtIndex:j];