目录
[toc]
说明:本博客所有图片来自书籍《算法导论》,在此感谢本书作者!
下面简单介绍一下插入、归并、堆排序、快速排序等常用排序算法。
插入排序
原理介绍:
顾名思义,插入排序即将没有排好顺序的数据插入到已经排好顺序的数据中。插入排序类似我们玩扑克牌,如图1所示,例如2/4/5/10是已经排好的序列,那么新来了一个数字7,从最后面数字10开始找,7小于10那么继续与前面的数字比较,7大于5,因此7排在5的后面,即将7插入在5的后面。
//数组下标从0开始
insertion_sort(A)
{ //A是一个数组
for i = 1:A.Length-1
{ //A.Length是数组的长度
key = A[i]; //记录新插入的数据
j = i-1;
while(key<A[j]&&j>=0)
{
A[j+1] = A[j]; //前一个数移动到后一个位置
--j;
}
A[j+1] = key; //将新数据插入到新的位置
}
}
插入排序总结
从伪代码直到,插入排序不需要复制数组,是原址的( in place)。插入排序的时间复杂度为T(n) = O(n^2)。
今天暂时到这里,明天更新归并排序。