我将以下代码从C转换为Obj-C,C代码行在下面评论并替换为Obj-C,但我在结果中遇到问题排序不正常这里的结果是代码,如果任何人可以协助PLZ
-(IBAction)clicked_insertsort:(id)sender{
NSMutableArray *iarray = [[NSMutableArray alloc]initWithArray:garr];
int n = [iarray count] ;
NSLog(@"%@",iarray);
int i,j,x;
for(i=1;i<=n-1;i++)
{
j=i;
//x=a[i];
x=[[iarray objectAtIndex:(NSUInteger)i]intValue];
//while(a[j-1]>x && j>0)
while (j>0 &&[[iarray objectAtIndex:(NSUInteger)j-1]intValue] >x)
{
//a[j]=a[j-1];
[iarray replaceObjectAtIndex: (j) withObject: [iarray objectAtIndex: (j-1)]];
j=j-1;
}
// a[j]=x;
[[iarray objectAtIndex:(NSUInteger)j]intValue] == x;
}
NSLog(@"%@",iarray);
}
排序前的
[Session started at 2012-09-12 02:13:43 +0300.]
2012-09-12 02:13:49.127 sort_alg[1748:207] (
43,
18,
15,
135,
37,
81,
157,
166,
117,
110
)
and after sort
2012-09-12 02:13:49.130 sort_alg[1748:207] (
43,
43,
43,
43,
135,
135,
135,
135,
157,
166
)
答案 0 :(得分:3)
这不符合你的想法:
[[iarray objectAtIndex:(NSUInteger)j]intValue] == x;
在索引j
获取对象的intValue,然后与x
进行比较,结果无效。
您应该阅读NSArray
的文档并使用内置的排序方法。
答案 1 :(得分:2)
要设置(替换)数组元素,首先要执行此操作:
//a[j]=a[j-1];
[iarray replaceObjectAtIndex: (j) withObject: [iarray objectAtIndex: (j-1)]];
然后由于某种原因,当你下一次希望做类似的事情时,你会尝试:
// a[j]=x;
[[iarray objectAtIndex:(NSUInteger)j]intValue] == x;
您是否添加==
以摆脱编译器错误?
第一种方法是正确的 - 你需要调用一个方法来设置(替换)数组中的元素。
现在你知道了答案......