您的位置:首页 > 其它

常用排序算法简介

2015-11-13 16:34 239 查看
目录

[toc]

说明:本博客所有图片来自书籍《算法导论》,在此感谢本书作者!

下面简单介绍一下插入、归并、堆排序、快速排序等常用排序算法。

插入排序

原理介绍

顾名思义,插入排序即将没有排好顺序的数据插入到已经排好顺序的数据中。插入排序类似我们玩扑克牌,如图1所示,例如2/4/5/10是已经排好的序列,那么新来了一个数字7,从最后面数字10开始找,7小于10那么继续与前面的数字比较,7大于5,因此7排在5的后面,即将7插入在5的后面。



图1 插入排序示意图

**例子讲解**
图2为插入排序的一个例子。原始数组A=[5,2,4,6,1,3],矩阵的上面是数组的上标。

1. 首先(a)中位置2与位置1比较大小,2小于5,交换位置,如(b);
2. 然后(b)中位置3与位置2比较大小,4小于5,交换位置,接着位置2与位置1比较大小,4大于2,停止,如(c);、
3. 依次类推,直到数组排序完成,如(f)。



图1 插入排序示意图

**插入排序升序伪代码**

//数组下标从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)。

今天暂时到这里,明天更新归并排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: