C语言练习之 插入排序(一)
排序算法,是编程中经常使用的算法,我经常听说的有冒泡排序、插入排序、希尔排序、选择排序等等
由于笔者并非计算机专业科班出身,加上天资一般,当时学习的时候,真是头疼不已,那时候很多上说的也
不是特别清楚,后来搞明白了之后,时间一长,又忘了(哈哈)。所以总结一下,需要用时直接到博客园上
面去复制。
今天就说一下插入排序:插入排序的核心思想是:从头开始,每次头元素作为 “哨兵” 依次和后面的元素
进行比较,(假设从小到大排列)后面大的元素和“哨兵”比较,如果后面的元素比“哨兵”大则交换,每比较一
次,都会从比较位置,向首元素方向进行,因此,该排序算法效率并不高,时间复杂度为O(n2)
#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("\n"); }
程序在vs2015控制台上运行如下: