排序算法总结:二、插入排序
2015-07-15 17:26
232 查看
先说一下比较排序的定义吧:
输入数据进行的操作。
将一个数组分为两部分,前面为排好序的部分,后面为未排序的部分
将未排序部分的元素逐个插入到已排好序部分的正确位置上
就像扑克牌按顺序排列,原先 2,4,5 和 10 都排好序了,现在需要为 7 找到正确的位置
平均运行时间为 T(N) = Θ(N^2)。
比较排序的定义
就是除了赋值操作外, 只存在小于‘<’和大于‘>’这两种运算符是仅有的允许对输入数据进行的操作。
插入排序的性质
插入排序是一种比较排序将一个数组分为两部分,前面为排好序的部分,后面为未排序的部分
将未排序部分的元素逐个插入到已排好序部分的正确位置上
就像扑克牌按顺序排列,原先 2,4,5 和 10 都排好序了,现在需要为 7 找到正确的位置
时间复杂度
运行时间为 T(N) = O(N^2)平均运行时间为 T(N) = Θ(N^2)。
代码实现
#include typedef int ElementType; void InsertionSort(ElementType A[], int N); void main(void) { int i; int unordered[] = {4, 5, 2, 1, 0}; InsertionSort(unordered, 5); for(i = 0; i < 5; i++) { printf("%d\n", unordered[i]); } } //双重循环,时间复杂度为T(N)=O(N^2) void InsertionSort(ElementType A[], int N) { int j, p; ElementType Tmp; for(p = 1; p < N; p++) { Tmp = A[p]; for(j = p; j > 0 && A[j - 1] > Tmp; j--) { A[j] = A[j - 1]; } A[j] = Tmp; } }
排序过程演示
排序数组 5, 2, 4, 6, 1, 3 的过程:相关文章推荐
- Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式'
- Oracle教程-常用命令(二)
- Redhat EL服务器命令行下U盘的使用
- 自定义jQuery插件Step by Step
- [小技巧] cscope 命令
- VDN平台各种数据库连接设置
- 欢迎使用CSDN-markdown编辑器
- Java NIO系列教程: Buffer
- MySQL备份还原——AutoMySQLBackup介绍
- Mac运行速度变慢怎么办?Mac运行速度慢解决办法
- 排序算法总结:一、基数排序
- IOS AppDelegate方法全解
- android二维码扫描
- vs2008+matlab2010b--matlab转换为dll的操作步骤 ( 一)
- 深度剖析HTML的语意和与其相关的前端框架
- 源码推荐(7.15):重写UIFont方法 设置字体格式以及大小,可重用的水平滚动scrollView列表 极致性能优化
- 一个普通骰子,连抛3次都是1点,请问抛第4次的概率是多少?
- android-整体UI设计-(滑动导航栏+滚动页面)
- [Elasticsearch] 控制相关度 (六) - function_score查询中的filter,functions及random_score参数
- OpenJWeb3.1 Java Web应用快速开发平台全部开源公告