я получаю сообщение об ошибке при попытке отсортировать массив ста тысяч Интс (я проверил сорт и он работает на пятьдесят тысяч):Quicksort Ошибка при сортировке большого массива
предупреждение: может не загружать информацию о классе Objective-C. Это значительно снизит качество имеющейся информации о типе.
У меня также есть метод сравнения итеративно и появляется та же ошибка
Почему происходит это сообщение об ошибке?
Возможно ли отсортировать этот список, и если да, то как его исправить?
-(void) quickSort{
return [self quickSort:0 pivot:[self.toSort count]-1 right: [self.toSort count]-1];
}
-(void) quickSort:(int) left pivot:(int) pivot right:(int) right {
if(left < right){
pivot = [self compareToPivot:[[self.toSort objectAtIndex:right] intValue] start:left finish:right position:left];
[self quickSort:pivot+1 pivot:pivot right:right];
[self quickSort:left pivot:pivot right:pivot-1];
}
}
-(int) compareToPivot:(int) pivot start:(int)start finish:(int)finish position:(int)pos{
if(pos == finish){
[self switchNums:start second:finish];
return start;
}
if([[self.toSort objectAtIndex:pos] intValue] <= pivot){
[self switchNums:pos second:start];
return [self compareToPivot:pivot start:start+1 finish:finish position:pos+1];
}
return [self compareToPivot:pivot start:start finish:finish position:pos+1];
}
-(void) switchNums:(int)first second:(int)second{
id temp = [self.toSort objectAtIndex:second];
[self.toSort replaceObjectAtIndex:second withObject:[self.toSort objectAtIndex:first]];
[self.toSort replaceObjectAtIndex:first withObject:temp];
}
Итерационный Сравните и это прекрасно работает:
-(int) compareToPivot:(int) pivot start:(int)start finish:(int)finish position:(int)pos{
while(pos != finish){
if([[self.toSort objectAtIndex:pos] intValue] <= pivot){
[self switchNums:pos second:start];
start+=1;
}
pos++;
}
[self switchNums:start second:finish];
return start;
}
Вы почти наверняка видите переполнение стека здесь - это слишком много рекурсивно и вызывает несвязанное повреждение памяти. Можете ли вы опубликовать свою итеративную версию, чтобы мы могли видеть, что она делает? См. Также http://stackoverflow.com/questions/31431287/swift-2-warning-could-not-load-any-objective-c-class-information-from-the-dyld –