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

从小到大的插入排序(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;
}


你可能感兴趣的:(插入排序,C语言,算法导论)