常用排序之插入排序法
来源:互联网 发布:python 哪方面的私活多 编辑:程序博客网 时间:2024/05/20 07:35
算法描述
何为插入排序呢?顾名思义,即向一个有序数据序列中插入一个数,插入此数后的序列仍然有序。
⒈ 从第一个元素开始,该元素可以认为已经被排序
⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 将新元素插入到下一位置中
何为插入排序呢?顾名思义,即向一个有序数据序列中插入一个数,插入此数后的序列仍然有序。
具体描述如下:
假如有一个数组:⒈ 从第一个元素开始,该元素可以认为已经被排序
⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 将新元素插入到下一位置中
⒍ 重复步骤2~5
对于P=1趟到P=N-1趟,插入排序保证从位置0到位置P上的元素为已排序状态。插入排序利用了这样的事实:位置0到位置P-1上的元素是已排过序的。如下:
初始 34 8 64 51 32 21
p=1 8 34 64 51 32 21
p=2 8 34 64 51 32 21
p=3 8 34 51 64 32 21
p=4 8 32 34 51 64 21
p=5 8 21 32 34 51 64
例程
#include<iostream>void InsertionSort(int a[], int n){int j, temp, p;for (p = 1; p < n; p++){temp = a[p];for (j = p; j > 0 && a[j - 1] > temp; j--)a[j] = a[j - 1];a[j] = temp;}}int main(){int b[] = { 9,8,19,4,6,2,3,7,4};InsertionSort(b,9);for (auto c : b)cout << c << " ";system("pause");}
时间复杂度分析
由于嵌套循环的每一个都花费N次迭代,因此插入排序为O(N^2)。
最好的情况是数组时有序排列的,每插入一个元素,只需考查前一个元素,此时的时间复杂度为O(n);
最坏的情况下,数组完全逆序,插入第2元素要考查前1个元素,插入第3个元素要考查前两个元素,.....,插入第N个元素,要考虑前N-1个元素。因此,最坏情况下的比较次数为1+2+3+...+n-1,结果为n^2/2,此时时间复杂度为O(n^2);
所以插入排序的平均时间复杂度为O(n^2);阅读全文
1 0
- 常用排序算法之插入排序法
- 常用排序之插入排序法
- 常用排序算法之插入排序
- Java常用排序算法之插入排序
- 常用排序算法之插入排序
- 常用排序算法之直接插入排序
- java常用排序算法之插入排序
- 常用排序算法之插入排序
- 常用排序算法之直接插入排序
- 常用排序算法之折半插入排序
- 常用算法之插入排序
- 排序法之插入排序
- 常用排序算法之插入排序与希尔排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- Java多线程(11)——线程池
- OCP 11G 053题库解析汇总链接(201-400)
- python学习杂记1
- OCP 11G 053题库解析汇总链接(401-600)
- javascript实现打印指定区域的内容
- 常用排序之插入排序法
- OCP 11G 053题库解析汇总链接(601-712)
- 牛客错题集锦5
- StringBuffer、String、StringBuilder的用法以及他们的区别
- Spring注解@Resource和@Autowired的区别
- 心脏滴血漏洞简单攻击
- 快速幂
- 自定义博客园Markdown样式.超简单!
- 虚拟机网络设置