关于插入排序的代码

时间:2013-12-26 07:11:38

标签: algorithm insertion-sort

我目前正在阅读Cormen和co。的算法简介。我在为它推断伪代码时遇到了一些麻烦。我理解算法直观地做了什么,以及如何在整数数组中对某些元素进行排序。 例如 array = [5] [2] [4] [6] [1] [3] ,键是 j = 2 i = J-1 即可。然后检查 i> 0 [5] 然后与 [5] 交换 [2] 。这里有令人困惑的部分: i = i -1 ??我的意思是我们只是设置 i = j-1 ,为什么我们再次递减 i

以下是伪代码:

for j = 2 to A.length
    key = A[j]
    i = j - 1
    while i > 0 and A[i] > key
          A[i + 1] = A[i]
          i = i - 1         //this the part I do not understand.
    A[i + 1] = key

2 个答案:

答案 0 :(得分:1)

数组元素1..(j-1)已经排序,您尝试将元素a[j]插入到已排序的元素中。这是通过while循环完成的。从元素a[j-1]开始,将新元素a[j]逐个与已排序的元素进行比较,直到找到正确的插入位置。只要a[i]更大,a[j]必须在该元素之前移动,因此我们将a[i]向上移动一个位置并减少i以便进入下一个元素进行比较

要了解算法,我建议您使用一个小例子进行桌面检查。按照所有步骤查看其行为。

答案 1 :(得分:1)

此处列出的插入内容如下:

在每个j处,索引j之前的数组部分被排序,而索引j之后没有排序。

因此插入排序为新的A [j]找到合适的位置并将其插入那里。

例如,如果数组是

,则在j = 4i = 3
2 4 5 3 1 0  
      ^

The array before element 3 is sorted.  
1. So it checks that 3 is less than 5, hence copies 5 to array[i+1] (i+1 = 4).  
   2 4 5 5 1 0  
2. Then it decrements i checks that 3 is less than 4, hence copies 4 to array[i+1] (i+1 = 3).  
   2 4 4 5 1 0   
3. Then it checks that 3 is more than 2, hence stops and makes A[i+1] = key.  
   2 3 4 5 1 0