C语言练习之 插入排序(一)

  排序算法,是编程中经常使用的算法,我经常听说的有冒泡排序、插入排序、希尔排序、选择排序等等

由于笔者并非计算机专业科班出身,加上天资一般,当时学习的时候,真是头疼不已,那时候很多上说的也

不是特别清楚,后来搞明白了之后,时间一长,又忘了(哈哈)。所以总结一下,需要用时直接到博客园上

面去复制。

  今天就说一下插入排序:插入排序的核心思想是:从头开始,每次头元素作为 “哨兵” 依次和后面的元素

进行比较,(假设从小到大排列)后面大的元素和“哨兵”比较,如果后面的元素比“哨兵”大则交换,每比较一

次,都会从比较位置,向首元素方向进行,因此,该排序算法效率并不高,时间复杂度为O(n2)

C语言练习之 插入排序(一)

#include <stdio.h>

#define SWAP(X,Y) X=X+Y;Y=X-Y;X=X-Y

//按最坏的时间复杂度
int main(int argc, char *argv) {
    int a[10] = {10,9,8,7,6,5,4,3,2,1};
    for (int i = 1; i < 10; i++) {
        int j = i;
        while ((j > 0) && a[j] < a[j - 1])
        {
            SWAP(a[j], a[j - 1]);
            j -= 1;
        }
    }

    for (int i = 0; i < 10; i++) {
        printf("%d ",a[i]);
    }
    printf("
");
}

程序在vs2015控制台上运行如下:

C语言练习之 插入排序(一)