【常用排序算法】以最简单的方式理解插入排序
来源:互联网 发布:c语言有趣小程序 编辑:程序博客网 时间:2024/05/21 11:10
思想理解:
插入排序的工作原理非常像抓扑克牌,最开始是一张,大的放后面,小的放前面。
主要要实现的就是插入,时间复杂度是O(1);但是主要费时的就是插入要实现插入位置之后的元素全部往后移动一位,但是如果插入的元素是已有牌里最大的,那么就直接放在最后就好。
代码实现:
#include <stdio.h>// 分类 ------------- 内部比较排序// 数据结构 ---------- 数组// 最差时间复杂度 ---- 最坏情况为输入序列是降序排列的,此时时间复杂度O(n^2)// 最优时间复杂度 ---- 最好情况为输入序列是升序排列的,此时时间复杂度O(n)// 平均时间复杂度 ---- O(n^2)// 所需辅助空间 ------ O(1)// 稳定性 ------------ 稳定void InsertionSort(int A[], int n){ for (int i = 1; i < n; i++) // 类似抓扑克牌排序 { int get = A[i]; // 右手抓到一张扑克牌 int j = i - 1; // 拿在左手上的牌总是排序好的 while (j >= 0 && A[j] > get) // 将抓到的牌与手牌从右向左进行比较 { A[j + 1] = A[j]; // 如果该手牌比抓到的牌大,就将其右移 j--; } A[j + 1] = get; // 直到该手牌比抓到的牌小(或二者相等),将抓到的牌插入到该手牌右边(相等元素的相对次序未变,所以插入排序是稳定的) }}int main(){ int A[] = { 6, 5, 3, 1, 8, 7, 2, 4 };// 从小到大插入排序 int n = sizeof(A) / sizeof(int); InsertionSort(A, n); printf("插入排序结果:"); for (int i = 0; i < n; i++) { printf("%d ", A[i]); } printf("\n"); return 0;}
参考文章:http://www.cnblogs.com/eniac12/p/5329396.html
阅读全文
0 0
- 【常用排序算法】以最简单的方式理解插入排序
- 【常用排序算法】以最简单的方式理解冒泡排序
- 【常用排序算法】以最简单的方式理解选择排序
- 【常用排序算法】以最简单的方式理解快速排序
- 【常见排序算法】以最简单的方式理解归并排序
- 三个最简单的排序算法:插入、冒泡、选择
- 常用的排序算法:冒泡,简单选择,直接插入,快速排序,堆排序
- 排序算法---最常用的快速排序
- 最常用的排序:快速排序算法
- 几种排序算法的最简单实现方式
- 几种排序算法的最简单实现方式
- 插入排序算法理解
- 常用排序算法--插入排序
- 【学习总结】Java中最常用的三大排序算法-冒泡排序、选择排序、插入排序
- 简单排序算法--插入排序
- 常用的排序算法:插入排序,希尔排序,冒泡排序,选择排序,快速排序,归并排序
- 直接插入排序的最简单实现
- 常用排序算法之二:直接插入排序的两种实现方式
- python爬取CSDN博客并用WordCloud词云分析
- boost之内存池使用实例
- 多线程生产者与消费者问题代码模型
- SQL Server代理服务无法启动的处理方法(转载)
- 一脸懵逼学习Hive(数据仓库基础构架)
- 【常用排序算法】以最简单的方式理解插入排序
- 单KEY业务,数据库水平切分架构实践
- BZOJ1194: [HNOI2006]潘多拉的盒子
- 鼠标右键
- 感觉不错到一段感慨
- Vue学习之源码分析--Vue.js依赖收集(二)
- node 学习笔记
- 一脸懵逼学习Hive的安装
- Tomcat server.xml配置详解