我以下面这个例子来更加形象地解释一下上面的代码。假设要将5,4,3,2,1这个数组调整为升序,n为5,数组的下标分别为0,1,2,3,4。
for循环的第一趟循环,为的就是让数组的前两个数有序。...第一趟i=0,endi=i=0,tmp=a[1]=4(tmp的作用就是保存要插入前面序列的那个数的值),a[endi](第一个数)比tmp(第二个数的值)大,将 a[endi]的值赋给a[endi +...endi不断减减,比tmp大的数就不断往后挪一格,最后endi+1这个位置就是tmp这个值应该去的位置。...有人可能就会问了,为什么要取一定距离来分组呢?...最后当gap == 1时,就是直接插入排序。在这里要说明一下,为什么for循环中的限定语句要写成i < n - gap?