主页 > 开源代码  > 

排序与算法:插入排序

排序与算法:插入排序

执行效果 插入排序的执行效果是这样的:

呃……看不懂吗?没关系,接着往下看介绍 

算法介绍 插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用原地排序(即只需用到 O(1) 的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 如果对插入排序的效率不是很满意,还可以看下它的改进版:希尔排序。 算法档案 时间复杂度:O(n2) 最优时间复杂度:O(n) 平均时间复杂度:O(n2) 空间复杂度:总共 O(n),需要辅助空间 O(1) 稳定性:稳定 算法步骤 从第一个元素开始,该元素可以认为已经被排序

取出下一个元素,在已经排序的元素序列中从后向前扫描如果该元素(已排序)大于新元素,将该元素移到下一位置重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置将新元素插入到该位置后重复步骤 2~5,直到所有元素排序完毕

算法实现

#include <stdio.h> void insertion_sort(int array[], int length); void insertion_sort(int array[], int length) { int i, j, temp; for (i = 1; i < length; i++) { temp = array[zxsq-anti-bbcode-i]; j = i - 1; for ( ; j >= 0 && array[zxsq-anti-bbcode-j] > temp; j--) { array[j+1] = array[zxsq-anti-bbcode-j]; } array[j+1] = temp; } } int main(void) { int array[] = {73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109}; int i, length; length = sizeof(array) / sizeof(array[zxsq-anti-bbcode-0]); insertion_sort(array, length); printf("排序后的结果是:"); for (i = 0; i < length; i++) { printf("%d ", array[zxsq-anti-bbcode-i]); } putchar('\n'); return 0; }

程序实现如下:

标签:

排序与算法:插入排序由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“排序与算法:插入排序