Objective C排序数组

时间:2012-03-27 10:46:15

标签: iphone objective-c ios sorting

我想使用Bubble Sort对数组进行排序。 由于哪个数组没有正确排序,我错过了一个小点。 如果有人能解决问题,我将非常感激。

int i,k;    
int flag = 1;   
MReview *store1 ,*store2,*tempSwap;  
tempSwap = [[MReview alloc] init];  
store1 = [[MReview alloc] init];  
store2 = [[MReview alloc] init];  

for (i = 1;i <= ([arrSortWeeks count]) && flag; i++)
{  
    NSLog(@"Next Iteration: %d", i+1);  
    flag = 0;  
    for (k = 0;   k < ([arrSortWeeks count]-1);   k++)
    {

      store1 = [arrSortWeeks objectAtIndex:k+1];   
      store2 = [arrSortWeeks objectAtIndex:k];  
      //Confronto returns -1 if Store1 is greater and returns 1 if Store1 is smaller
      if (([self confronto:store1.ReviewDate :store2.ReviewDate]) == -1) 
      {    
         tempSwap = store2;  
         store2 = store1;  
         store1 = tempSwap;  
         //[store1 retain];  
         //[store2 retain];  

         [arrSortWeeks replaceObjectAtIndex:k+1 withObject:store1];  
         [arrSortWeeks replaceObjectAtIndex:k withObject:store2];

         flag = 1;  
       }
    }
}

3 个答案:

答案 0 :(得分:3)

如果这是用于学术练习(为什么还要使用冒泡排序?),请参阅其他海报的回复。

如果这是在现实世界中使用的代码,请注意冒泡排序是一种非常慢的排序方法,通常不建议用于学习工具以外的任何其他方法。

Big O notation是描述排序算法时间复杂度的一种方法。冒泡排序的时间复杂度为O(n 2 ),这意味着时间将是被排序元素数量的平方的函数,即对于多个元素来说非常慢。

通常,您应尽可能使用内置排序方法,因为这些方法已经过优化,可以更快地进行排序。

This post describes the built-in methods for sorting in iOS,它具有更简洁和可读性的额外好处,并且比冒泡排序快得多。

答案 1 :(得分:2)

您只在迭代数组。 BubbleSort需要n ^ 2次迭代来对数组进行排序。

for(int i=0; i< [array count]-2; i++) {
for(int j=1; j< [array count]-1; j++) {
    if([array objectAtIndex:i] > [array objectAtIndex:j]) {
        // SWAP THEM
    }
}
}

发布的代码与你正在做的事情不完全相符我想你可以看出我的意思。

答案 2 :(得分:0)

不要删除和添加特定索引处的对象,只需使用该方法替换。

例如:[arrSortWeeks replaceObjectAtIndex:k+1 withObject:store2];

post将帮助您如何使用自定义对象对NSMutableArray进行排序。