算法与数据结构
金启亮
Cease to struggle and you cease to live.
展开
-
堆排序 Heap Sort
堆和优先队列 Heap and priority Queue❓什么是优先队列?普通队列:先进先出,后进后出优先队列:出队顺序和入队顺序无关,和优先级相关❓为什么使用优先队列?在1,000,000个元素中选出前100名?抽象:在N个元素中选出前M个元素排序?NlogN使用优先队列?NlongM❓优先队列主要操作?入队出队:取出优先级最高的元素❓优先队列的实现?【注】使用堆...原创 2020-03-11 11:55:57 · 105 阅读 · 0 评论 -
Merge Sort和Quick Sort的衍生问题
Merge Sort和Quick Sort的衍生问题【1】Merge Sort和Quick Sort都使用了分治算法顾名思义,分而治之,就是将原问题,分割成同等结构的子问题,之后将子问题逐一解决后,原问题也就得到了解决。【2】求一个数组中逆序对的数量(衡量一个数组的有序程度)(思路1)暴力解法(思路2)使用Merge Sort的思路求逆序对的个数,算法复杂度为O(nlogn)要解决...原创 2020-03-08 22:54:37 · 130 阅读 · 0 评论 -
快速排序法-Quick Sort
快速排序法-Quick Sort【算法思想】(1)在当前数组中选择一个数为基点,使它处于排好序的位置,并且这个数左边的数小于它,右边的数大于它。(2)分别对这个基点左右两边的数进行相同操作。【Partition】(1)通常选取数组最左边的数作为分界点元素,这里我们标记为l,然后我们开始遍历剩余的数组,将其分为小于v的部分和大于v的部分,这两个部分的分界点我们用j来表示。当前访问的元素...原创 2020-03-08 17:05:37 · 139 阅读 · 0 评论 -
归并排序法-Merge Sort
归并排序-Merge Sort(O(nlogn))【算法思路】(1)要对如下数组进行归并排序,首先将数组分为两半分别进行排序。(2)然后再将左边数组和右边数组分别分为两半,进行排序。(3)同理,再次分半。这是每个部分只有一个元素,可以当作是有序的,这是我们要向上归并。(4)一直归并,直到归并到最后一层,这是数组就已经有序了【归并过程】(1)首先开辟一个同样大小的临时空间来...原创 2020-03-06 16:32:19 · 181 阅读 · 0 评论 -
插入排序法-Insertion Sort
插入排序-Insertion Sort 其实插入排序的思想和打扑克时整理扑克牌的思想是一样的,看后面的每张牌,将它们插入到前面合适的位置,当最后一个牌进行操作之后手里的牌就是有序的了。(1)如下是我们要排序的数组。首先,第一个元素8的位置不动,默认已经排好序了(2)然后为第二个元素6找到合适的...原创 2020-03-05 23:50:14 · 177 阅读 · 0 评论 -
选择排序法-Selection Sort
一、O(n2)的排序算法(1)基础(2)编码简单,易于实现,是一些简单情景的首选(3)在一些特殊情况下,简单的排序算法更有效(4)简单的排序算法思想衍生出复杂的排序算法(5)作为子过程,改进更复杂的排序算法二、选择排序-Selection Sort(1)对下面数组从小到大排序(2)找到数组中最小的元素1和第一个位置8进行交换,此时1这个元素就已经在最终数组排好序的位置了(3...原创 2020-03-05 21:39:33 · 284 阅读 · 0 评论