《算法图解》读书笔记-03

阅读上一篇文章

第二章:排序

众所周知,纷繁复杂的排序算法是无数面试官折磨毕业生的神奇;现在就让我们来看看各种各样的排序算法吧;


1.选择排序

冒泡排序的逻辑是:

  • 从需要排序的序列中选出最小值放置到左边
  • 下一个循环将不考虑最左侧的元素
  • 序列只有一个元素时停止排序

冒泡排序的复杂度是 O ( n 2 ) O(n^2) O(n2)


2.冒泡排序

冒泡排序的逻辑是:

  • 虚拟扫描头同时检查两个两个相邻变量,左大于右则不变,否则交换位置
  • 扫描头向右移动一格,检查并交换变量
  • 此过程循环进行,直到某次循环没有进行任何操作时,循环终止

冒泡排序的复杂度也是 O ( n 2 ) O(n^2) O(n2)


3.插入排序

插入排序的逻辑是:

  • 从右侧取一个元素,插入到左侧已经排序过的序列中合适的位置
  • 左侧排序过的序列长度加一,右侧未排序过的序列长度减一
  • 循环执行直到全部元素都已排序

第一次开始排序时,需要从序列中选出一个最小的放置在最左边;

插入排序的时间复杂度是 O ( n 2 ) O(n^2) O(n2)


4.堆排序

前面的文章中提到过堆,而使用堆排序也是一种可行的办法;具体的做法是:先构建一个堆,再一个一个取出元素,然后排序就完成了;

堆的构建方式,元素的取出操作都在前面的文章中提到了;

堆排序的时间复杂度为 O ( n lg ⁡ n ) O(n\lg{n}) O(nlgn)

5.归并排序

归并排序的精髓是:把一个序列分割为两个序列,把剩下的序列一分为二,直到不能再分割为止;然后开始把相邻的两个序列合并,每次合并时都进行排序,当从所有序列全部都合成为一个序列时,排序就完成了;

归并排序的复杂度为 O ( n lg ⁡ n ) O(n\lg{n}) O(nlgn),和堆排序相同;

6.快速排序

说实话这个排序算法的名字起的相当嚣张;

这个算法首先在序列中随机选择一个数作为基准值,然后将小于这个数的值放在左边,将大于这个数的值放在右边;接着对基准值两边的序列执行相同的操作,直到序列被完全排序为止;

快速排序的平均运行时间为 O ( n lg ⁡ n ) O(n\lg{n}) O(nlgn),显然对不起这个名字,它和归并排序和堆排序的时间复杂度是一样的;

持续更新中…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值