常用排序算法简介

目录
[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)。

今天暂时到这里,明天更新归并排序。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值