参考教材 《数据结构与算法》–裘宗燕
《算法》第四版
附关键码解释:
假设需要排序的是某种数据记录的序列,每个记录里有一个或多个支持排序的关键码。
在面向对象编程中,定义的结构体、数据结构实为一种抽象概念。例如想将1000个学生进行排序,那么如何进行排序呢?故可根据人为定义的关键码进行排序。例如学生的身高可作为一关键码。
class record:
def __init__(self, key, datum):
self.key = key
self.datum = datum
插入排序,顾名思义其操作方式是插入,不断把一个个元素插入一个序列中,最终得到排序序列。
为了少用辅助空间,最合适的方法为将正在构造的排序序列嵌入到原来的表中。
Python描述:
def insert_sort(lst):
for i in range(1, len(lst)):
x= list[i]
j = i
while j > 0 and lst[j-1].key > x.key:
lst[j] = lst[j-1] #反序逐个后移,确定插入位置
j -= 1
lst[j] = x
在计算机的实现中,为了要给插入的元素腾出空间,需要将其余所有元素在插入之前都右移一位。这种算法叫插入排序算法。
当前索引左边的所有元素都是有序的。
public class insertion
{
public static void sort(Comparable[] a)
{
#将a[]按升序排序
int N = a.length;
for(int i = 1; i < N; i++)
{
for(j = i; j > 0 && less(a[j], a[j-1]);j--)
exch(a, j, j-1);
}
}
}