插入排序
来源:互联网 发布:三维码生成软件 编辑:程序博客网 时间:2024/03/29 02:47
插入排序
一、适用场景
适用于对少量元素进行排序。
二、插入排序思想
插入排序类似于整理手里的牌,开始手是空的,所有牌都放在桌子上,一张一张插入到手中。手中的牌是有序的,新放一张牌只需在手中为该牌腾出一张牌的位置,以此类推,所有牌将有序放于手中。插入排序亦基于该思想。
证明该思想的正确性:
1、假如A[1..i-1](i 从 2 -> Length[A]) 是有序的,则将A[i]插入到arr[1..i]中合适的位置可使A[1..i]有序。
2、i=2时即只有一个元素,显然有序。当i 取Length[A]时则arr[1..Length[A]]有序,即整个数组A有序。
故插入排序可保证数组有序。
三、插入排序伪代码描述
insertSort(A) for i <- 2 to Length[A] do key <- A[i] Δ 从A[i] 插入到A[1..i-1] j <- i-1 while j > 0 and A[j] > key do A[j+1] <- A[j] j <- j - 1 A[j+1] = key
四、程序实现(C++/JAVA)
//T 为任意支持 “>” 操作的数据类型void insertSort(T A[],int length)//length为数组(从下标为1开始)元素个数 { //一个元素是有序的,故从第二个元素开始插入数据 for(int i=2;i<=length;i++) { T key = A[i]; //将元素arr[i]插入到arr[1..i-1] int j = i-1; //若元素比key大,则向后移动 while(j > 0 && A[j] > key) { A[j+1] = A[j]; j--; } //将key(arr[i])放置于arr前i+1个元素应在的位置 A[j+1] = key; }}
五、伪代码描述约定
1、书写上的“缩进”表示程序中的分程序结构;
2、while、for、repeat等循环结构和if、else条件结构和pascal相同;
3、符号Δ表示后面部分为注释;
4、变量i,j,key局部于特定过程,不能不加显式声明就是用全局变量;
5、多重复制i <- j <- e 是将表达式e的值赋予i和j;
6、参数按传值方式传递给一个过程。
7、布尔运算符“and”和“or”都具有短路能力。
8、数组元素的取值是有数组名后跟"[下标]"表示。A[j]表示数据A的第j个元素。
9、复合数据一般组织成对象,它们是由属性(attribute)或域(field)所组成的
- 插入排序-【插入排序】
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- sicily--1509. Rails
- POJ 2699 枚举+最大流
- 基于hadoop和hbase的youtube简单模拟4
- 移植mtd-utils工具包--使用教程
- QT调试提示-没有GDB二进制档可用为二进制格式'x86-windows-msvc2010-pe-32bit
- 插入排序
- 导出实体记录到Excel后,没有导出主键的值
- PHP中的MB_CONVERT_ENCODING与ICONV函数介绍[转]
- Spring3 之 DataSource 配置方法
- java字符串格式化
- Oracle EM(Enterprise Manager)的端口忘记了,如何找回端口号
- 禁止系统运行某个进程的简单方法(代码实现)
- 删掉Android4.0中与电话相关的小部件(快捷方式)
- substr函数在php中的应用