我一直算法的問題,需要我執行快速排序算法的鏈表和數組。
我已經完成了這兩個部分,算法正在工作,但似乎我的快速排序鏈接列表實現中有一些錯誤。爲什麼我的鏈表快速排序的實現比陣列慢得多?
這是我的快速排序鏈接列表實現。
public static void SortLinkedList(DataList items, DataList.Node low, DataList.Node high)
{
if(low != null && low !=high)
{
DataList.Node p = _PartitionLinkedList(items, low, high);
SortLinkedList(items, low, p);
SortLinkedList(items, p.Next(), null);
}
}
private static DataList.Node _PartitionLinkedList(DataList items, DataList.Node low, DataList.Node high)
{
DataList.Node pivot = low;
DataList.Node i = low;
for (DataList.Node j = i.Next(); j != high; j=j.Next())
{
if (j.Value().CompareTo(pivot.Value()) <= 0)
{
items.Swap(i.Next(),j);
i = i.Next();
}
}
items.Swap(pivot, i);
return i;
}
這裏是快速排序的數組實現
public static void SortData(DataArray items, int low, int high)
{
if (low < high)
{
int pi = _PartitionData(items, low, high);
SortData(items, low, pi - 1);
SortData(items, pi + 1, high);
}
}
static int _PartitionData(DataArray arr, int low, int high)
{
double pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++)
{
if (arr[j].CompareTo(pivot)<=0)
{
i++;
arr.Swap(i,j);
}
}
arr.Swap(i + 1, high);
return i + 1;
}
這裏是快速排序數組和鏈表的性能。 (左邊n,右邊的時間)
Picture
正如你所看到的qs鏈接列表花費了10分鐘來排序6400個元素。我不認爲它的正常..
另外我不認爲它因爲數據結構,因爲我使用相同的結構選擇排序和性能的鏈接列表和數組是相似的。
GitHub回購萬一我忘記提供一些代碼。 Repo
鏈接列表實現可能會比較慢,因爲...什麼是大O符號中的數組和隨機鏈表的隨機元素訪問時間? 「並且鏈接列表和數組的表現都相似」 - 這應該是一個令人擔憂的跡象,因爲它們不可以。無論如何 - 分析你的代碼。分析器是告訴你爲什麼有些緩慢。 – zerkms
所以你認爲它的正常,鏈表實現是如此之慢。對於鏈表,它需要超過10分鐘,對於數組,甚至不到一秒。 – InvGhostt
「所以你認爲鏈表的實現速度慢得多。」 ---回答你需要分析你的代碼。就Big-O而言,實現鏈表和基於數組的例子的複雜性是什麼?然後,再次 - 探查器。 – zerkms