啊哈!算法 读书笔记——第 1 章 一大波数正在靠近——排序

第 1 章 一大波数正在靠近——排序.
最快最简单的排序——桶排序:
       这个算法就好比有 11 个桶,编号从 0~10。每出现一个数,就在对应编号的桶中放一个
小旗子,最后只要数数每个桶中有几个小旗子就 OK 了。eg. 2 号桶中有 1 个小旗子,表示
2 出现了一次(还是看图最好解释O(∩_∩)O~)


        此处的每一个桶的作用其实就是“ 标记每个数出现的次数.
        最终,桶排序的时间复杂度为 O(M+N)

邻居好说话——冒泡排序:
       冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换
过来。
       冒泡排序每两个依次比较,直到最后一个尚未归位的数,已经归位的数则无需再进行比较(已经归位的数你还比较个啥,浪费表情)。
       冒泡排序的时间复杂度是 O(N ²)

最常用的排序——快速排序:
       冒泡排序解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,那有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!
      基本思想:快速排序的每一轮处理其实就是将这一轮的 基准数 归位,直到所有的数都归位为止,排序就结束了。
eg.给出 6 1 2 7 9 3 4 5 10 8,第一轮选择基准数6,如图:
直到3,i、j相遇,说明此次“探测”结束,交换3和基准数6,
到此,第一轮快速排序结束。同理,继续分别处理基准数左边和右边的。
       快速排序之所以比较快,是因为相比冒泡排序,每次交换是跳跃式的。其实快速排序是基于一种叫做“二分”的思想。

猜你喜欢

转载自blog.csdn.net/zjhysj/article/details/80542837