我需要了解插入排序的算法。
如果有人能够以外行的方式解释这段代码是如何分解的。
public void insertionSort() {
int in, out;
for(out=1; out<nElems; out++) {
long temp = a[out];
in = out;
while(in>0 && a[in-1] >= temp){
a[in] = a[in-1]; // shift item right,
--in;
a[in] = temp; } // end for
我想特别知道为什么
2.a [in-1]&gt; = temp,他们是否使用了这个,因为我们删除了一个元素?
答案 0 :(得分:0)
嗯,没有。某些排序实现甚至没有循环。在这种特殊情况下,它们使用我不明白的是,在其他类型中我们使用for循环,和 在这一个中我们在这个特殊的排序中使用while循环?
while
循环,因为事先不知道迭代次数,但在Java中,for
循环可以完成与while
循环完全相同的事情,因此它是只是一个可读性问题
a [in-1]&gt; = temp,他们是否使用了这个,因为我们删除了一个 元素?
因为它们执行移位,这总是通过将一个移位元素存储在临时变量中来完成。这可能是最经典的编程技巧:
a = 5, b = 6
tmp = a
b = a
a = tmp
// now a is 6 and b is 5
答案 1 :(得分:0)
while循环和for循环(基本上)是等价的,因为你总是可以这样做:
for(int i = 0; i < n; i++)
作为
int i = 0
while (i < n) {
...
i++;
}
(int i
的范围有点不同,例如在Java中,因为在for循环中,i
的范围仅在循环内。)
答案 2 :(得分:0)
好吧,根据while循环的结构,它可以起到与循环相同的作用。此外,大多数种类都使用递归。我给你的建议是
1)查找插入排序,足够基本,但查看可视化表示并分析正在进行的操作。这将帮助您了解代码中发生的事情。
2)考虑运行时间(平均为O(n ^ 2)的情况)。为什么是O(n ^ 2)?这是什么意思?