我想使用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;
}
}
}
答案 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进行排序。