插入排序算法输出错误

时间:2012-09-11 23:39:07

标签: iphone objective-c xcode arrays nsmutablearray

我将以下代码从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

2 个答案:

答案 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;

您是否添加==以摆脱编译器错误?

第一种方法是正确的 - 你需要调用一个方法来设置(替换)数组中的元素。

现在你知道了答案......