[算法导论学习心得]关于Insertion Sort

来源:互联网 发布:aws s3 java 开发文档 编辑:程序博客网 时间:2024/06/09 08:06

从小到大的插入排序(Insertion Sort)
伪代码:
for j ← 2 to length[A]    do key ← A[j]        i ← j        while i>0 and A[i]>key            i ← i-1        A[i+1] ← key

算法的理解:

此算法就是将待插入的数A[j]插入到已排好序的部分A[1...j-1]中,

i>0保证了不会出现越界的情况,A[i]>key说明此时待插入数据可以向左移一位

当while循环退出时,此时的key会大于等于A[i]但小于A[i+1],将key插入A[i]之后即可


//C语言代码#include <stdio.h>void insertionSort(int *a, int n){    if (n == 1 || n == 0)        return;    int i;    int j;    int k;    int key;    for (i = 1; i < n; i++)    {        key = a[i];        for (j = i - 1; j >= 0; j--)        {            if (key < a[j])<span style="white-space:pre"></span>// 满足条件一次,就挪一次位置            {                int temp = a[j + 1];                a[j + 1] = a[j];                a[j] = temp;            }        }    }}int main(){    int a[] = {5, 2, 4, 6, 1, 3};    insertionSort(a, 6);    int i = 0;    for (; i < 6; i++)    {        printf("%d  ", a[i]);    }    return 0;}


0 0
原创粉丝点击