欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

插入排序-算法导论笔记

程序员文章站 2022-06-04 18:16:07
...
  • 插入排序对于少量的数据它是一个有效的算法。插入排序的工作方式像人手里的扑克牌一样。开始时我们手里为空并且桌子上的牌面向下。然后我们每次从桌上拿走一张牌并将它插入手里正确的位置。为了把这种牌插入正确的位置,我们要从右到左将它和已在手中的牌进行比较。如下图:
    插入排序-算法导论笔记

  • 伪代码:

INSERTION-SORT(A) { 
for j = 2 to A.length { 
key = A[j]; 
//Insert A[j] into the sorted sequence A[1...j-1]
i = j - 1; 
while i > 0 and A[i] > key { 
A[i+1] = A[i]; 
i = i - 1; 
} 
A[i+1] = key; 
} 
}
  • 我们声明一个数组 a = {5,2,4,6,1,3},下标j指正拿到的牌”当前牌”。在for循环的每次迭代的开始,包含元素a[1…j-1]的子数组构成当前已排序好的牌,剩余子数组a[j+1…n]对应于仍在桌上的牌堆。事实上,元素a[1…j-1]就是在原来的位置1到j-1的元素;再把过程用图表示一下。
    插入排序-算法导论笔记

  • c语言代码实现:
    InsertSort.c

#include <stdio.h>
void insertSort(int *a);
int main() {
    int a[6] = { 5,2,4,6,1,3 };
    insertSort(a);
    int k;
    for (k = 0; k < 6;k++) {
        printf("%d ", a[k]);
    }
    getchar();
    return 0;
}


void insertSort(int *a) {
    int i, j,key;
    //这里是从第二个元素开始的
    for (j = 1; j < 6; j++) {
        key = a[j];
        //上一个元素
        i = j - 1;

        //数组下标0开始所以>=0
        while (i >= 0 && a[i] > key){
            a[i + 1] = a[i];
            i = i - 1;
        }

        a[i + 1] = key;
    }
}
  • 需要注意的是和伪代码有点不一样,伪代码只是实现思想for (j = 1; j < 6; j++)这里是从数组第二个元素开始的,数组从0开始,所以是j = 1;while (i >= 0 && a[i] > key)这里也是因为数组是0开始的,所以是>=0。
相关标签: 插入排序