一、插入排序
输入:n个数的一个序列<a1,a2,a3,a4,a5,......,an>;
输出:输入序列的一个排列,满足a1<=a2<=a3<=a4<=......an。
1. 简单介绍
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
2. 操作步骤
a> 从第一个元素开始,该元素可以认为已经被排序。
b> 取出下一个元素,在已经排序的元素序列中从后向前扫描。
c> 如果该元素(已排序)大于新元素,将该元素移到下一位置。
d> 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置。
e> 将新元素插入到该位置中,重复步骤2。
我们通常将算法描述为用一种伪代码书写的程序,伪代码和真码的区别在于:
1)在伪代码中,我们使用最清晰、最简洁的表示方法来说明给定的算法。
2)伪代码通常不关心软件工程的问题,为了更简洁的表达算法的本质,常常忽略数据抽象、模块性和错误的处理问题。
伪码中的一些约定:
1)缩进表示快结构
2)While、for 等循环结构以及if—else的条件结构跟c语言中具有类似的解释。
3)符号“//”表示注释
4)数组元素通过“数组名[下标]”这样的形式访问。
5)复合语句通常被组织成对象,对象又由属性组成,在面向对象的编程语言中创建句法来访问特定的属性,这在C语言中与访问结构体的方法类似,如A.length
6)一个return语句立即将控制返回到调用过程的调用点。在伪指令中,允许单一的return语句返回多个值
7)布尔运算符:and语句,除了判断左值的真假,还要判断右值的真假,若两边都没TRUE,则为真;or语句,只需判断左值是否为真就行,若为真,则整个语句为真。
8)关键词error表示已被调用的过程情况不对而出现了一个错误。
我们把表示一个数组或对象变量看做指向表示数组或对象的数据的一个指针。有时候一个指针根本不指向任何对象,这时,我们赋给他一个特殊值NIL。