我测量排序完成排序所需的步骤数,无论出于何种原因,气泡排序总是比插入排序快一点,从我读的内容来看,它应该是相反的方式。Java - 为什么我的Bubble排序比我的插入排序更快?
不会发布我的完整代码,但我相信这个问题可能与我有我的位置有关。
冒泡排序:
public void sort()
{
for (out = nElems-1 ; out >= 1 ; out--)
{
count = count+1;
for (in = 0 ; in < out ; in++)
{
if ((a.get(in)) > (a.get(in+1)))
{
swap (in, in+1);
count = count+2;
}
}
}
}
插入排序:
void sort()
{
Integer temp[] = new Integer[1];
for (out = 1 ; out < nElems ; out++)
{
count = count+1;
temp[0] = a.get(out);
in = out;
while (in > 0 && a.get(in-1) >= temp[0])
{
a.set(in, a.get(in-1));
--in;
count = count+2;
}
a.set(in, temp[0]);
}
}
,只是举个例子,我整理充满了2000的随机整数3个文本文件的值,从1- 2000年,插入排序的平均值为2,007,677步,而冒泡排序的平均值为2,005,719。
你如何计算步骤?你不应该计算正在进行的比较次数吗?或者可能访问数组的数量(读或写)? – Thilo 2015-02-06 00:14:34
是的,你在气泡排序中缺少比较(最里面的if,内部循环延续条件)。这只是两件事,我甚至没有看过插入排序。 – lared 2015-02-06 00:16:26
如果您有交换的count = count + 2,您是否应该为单向传输计数= count + 1? – Joffan 2015-02-06 00:17:11