我正在编写一个实现插入排序算法对数组进行排序的程序:
public void insertionSort()
{
int in, out;
for (out = 1; out < nElems; out++) // out is dividing line
{
copies++;
long temp = a[out]; // remove marked item
in = out; // start shifts at out
while (in > 0 && a[in - 1] >= temp) // until one is smaller,
{
a[in] = a[in - 1]; // shift item to right
--in; // go left one position
++comparissons;
}
a[in] = temp; // insert marked item
} // end for
} // end insertionSort(
我还实现了计算在算法过程中进行了多少比较的计数器。在我的while循环中:
while (in > 0 && a[in - 1] >= temp) // until one is smaller,
{
a[in] = a[in - 1]; // shift item to right
--in; // go left one position
++comparissons;
}
进行了两次比较,这意味着对于这两次比较,“比较”变量仅增加一(即使实际上进行了两次比较)。
我的问题是:如何通过两个比较将这个 while 循环分解为两部分,以便每次实际进行比较时增加“比较”,同时保留相同的功能。
谢谢!
仲量联行