插入排序的理解
2013-12-09 19:10
260 查看
#include<stdio.h> void INSERT_SORT(int array[],int len) /*array[0...j]为有序数列,将j往后的数依次插入该有序数列中*/ { int i , j ; int key ; for(i = 1 ; i < len ;++i ){ key = array[i] ; j = i - 1 ; while(array[j]>key && j >= 0){//寻找插入点的位置 array[j+1] = array[j] ; --j ; } array[j+1] = key ; } } main() { int array[10] ; int n ; n = 10 ; for(int i = 0 ; i < n ; ++i) scanf("%d",array+i) ; INSERT_SORT(array,n) ; for(int i = 0 ; i<n ; ++i) printf("%3d",array[i]) ; putchar('\n') ; }
先把源码写上来,说一下自己对插入排序的理解。
插入排序 任意取一个数(当然在源码中是按一定的顺序取得)插入到已排好序的数组中,让已排好序的那一部分array[0..j],与取出的值 key 进行比较,若array[j]大于该值key,那么这个数就后移一个单位即array[k] = array[k+1].
当key>array [ j ] 或者array[0..j]每一个数都与Key进行了比较,即j = -1 的情况时,那么第j+1个位置就是取出值的位置(刚开始我不理解为啥在第j+1个位置插入,而不在第j个, 写到这里我突然明白了,那就是当while循环结束,第j个位置的数小于Key或者j=-1,而第j个位置之前的值都是有序的,因此在第j+1个位置插入该值)。
该算法的时间复杂度为O(n^2),与冒泡排序时间复杂度相同。
相关文章推荐
- 插入排序-----自理解(详细注释)
- 通俗理解插入排序(直接插入排序,折半插入排序,希尔排序)
- 快速简单理解——直接插入排序
- C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)
- 插入排序的通俗理解
- 插入排序的理解
- C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)
- 浅谈数据结构之直接插入排序的理解
- 【笔试面试知识点查缺补漏深入理解之C与C++篇】排序的C语言实现-插入-选择-快排
- 4.6 直接插入排序法
- 数据结构排序算法总结包括选择、插入、希尔、快速、冒泡等排序方法
- 直接插入排序、折半插入排序、shell插入排序
- 经典算法之三:插入排序及二分优化
- 排序算法-直接插入排序
- 直接插入排序
- 【内部排序】一:直接插入排序(Straight Insertion Sorting)的多种实现(不断优化+源码)
- 常用算法Java实现之直接插入排序
- 排序(2)---------简单插入排序(C语言实现)
- 插入排序一(直接插入排序)
- 插入排序