【发布时间】:2012-10-06 11:20:16
【问题描述】:
我正在课堂上进行一项研究 我测试了冒泡排序和插入排序以及快速排序,我对随机数进行了测试。 结果表明,插入排序比冒泡排序快,而快速排序最慢。
所以我的时间排名如下
- 插入排序(最快)
- 冒泡排序(第二分)
- 快速排序(最慢)
考虑到插入和冒泡排序的复杂度为 O(n2) 而 快速排序 O(n log n) 和 O(n log n) 应该更快!!!
谁能跟我解释一下?
谢谢
(NSMutableArray *)quickSort:(NSMutableArray *)a
{
// Log the contents of the incoming array
NSLog(@"%@", a);
// Create two temporary storage lists
NSMutableArray *listOne = [[[NSMutableArray alloc]
initWithCapacity:[a count]] autorelease];
NSMutableArray *listTwo = [[[NSMutableArray alloc]
initWithCapacity:[a count]] autorelease];
int pivot = 4;
// Divide the incoming array at the pivot
for (int i = 0; i < [a count]; i++)
{
if ([[a objectAtIndex:i] intValue] < pivot)
{
[listOne addObject:[a objectAtIndex:i]];
}
else if ([[a objectAtIndex:i] intValue] > pivot)
{
[listTwo addObject:[a objectAtIndex:i]];
}
}
// Sort each of the lesser and greater lists using a bubble sort
listOne = [self bubbleSort:listOne];
listTwo = [self bubbleSort:listTwo];
// Merge pivot onto lesser list
listOne addObject:[[NSNumber alloc] initWithInt:pivot]];
// Merge greater list onto lesser list
for (int i = 0; i < [listTwo count]; i++)
{
[listOne addObject:[listTwo objectAtIndex:i]];
}
// Log the contents of the outgoing array
NSLog(@"%@", listOne);
// Return array
return listOne;
}
【问题讨论】:
-
您正在测试的数据有多大,您是否对每个算法使用相同的未排序数据?
-
你要么实现了快速排序错误,要么你做错了测试。发布您的实现和测试。
-
对于少量元素,插入排序比快速排序更快,因为虽然 O(N^2) 它有一个非常小的常数因子。为了获得更好的结果,请尝试对包含大量元素(例如 1000、1000000、1000000000 个元素)的数组进行排序。我不知道对于小型数组,bubblesort 的表现如何,但我猜只有少数元素它可能会胜过快速排序。
-
首先想到的问题是:您使用了多少数据?您是否打印了起始列表并看到这些数字实际上是随机的?您在快速排序中找到拆分值的算法是什么?
-
你所谓的“快速排序”不是快速排序。它是一个分区,然后是两个冒泡排序加上一个合并。
标签: objective-c algorithm sorting quicksort bubble-sort