算法导论第一个算法就是插入排序(insertion-sort),根据算法导论的解释和伪代码,这里对插入排序进行实现。

  • 算法导论中解释插入排序是从扑克牌切入的,6张扑克牌扣在桌子上,先拿起两张,如果第二张比第一张小,将第二张放在第一张前面,这时,第一张和第二张是有序的,再拿起第三张,如果第三张比第二张大,不做处理,如果第三张比第二张小,把第三张放到第二张前面,这个时候原来的第三张变成了第二张,在看现在的第二张是不是比第一张小,如果比第一张小,把现在的第二张放在第一张前面,现在的第二张变成第一张。

    • 例如:先拿的两张牌是4,3
    • 第一步:调整,变成3,4
    • 第二步:拿牌2,3,4,2,
    • 调整第一次3,2,4,再调整2,3,4,这时候就排好序了。

在程序实现中的理解:

  • 在程序实现中,插入排序是找到当前数可以插入的下标,再把当前数放到指定位置:
  • 例如:[4,2,3] 三个数,在一个数组中,对应下标0,1,2
  • 先算头两个数,4,2,先拿到2这个数,下标在1,2比4小,将下标1赋值为4,数组变成,[4,4,3],下标到了0,这是前面没有数了,把2放到0下标处,这是数组变成[2,4,3],2这个数排完了,再拿到3这个数,下标在2,先拿3和4比较,3比4小,将下标2,位置赋值为4,下标-1变成1,数组变成[2,4,4],再用3和2比较,3比2大,下标不变,3就在1的位置,把3放到下标为1的位置,数组变成,[2,3,4],这个时候数组就排好序了。

算法导论上的伪代码:

INSERTION-SORT(A)
    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
        A[i+1]=key

根据伪代码实现插入排序:

int[] insertionsort(int[] arr){
  for(int j=1;j<arr.length;j++){
     int key = arr[j];
     int i = j-1;
     while(i>=0&&arr[i]>key){
         arr[i+1] = arr[i];
         i--;
     }
     arr[i+1] = key;
  }
  return arr;
}

陈宁
0 声望0 粉丝