数据结构与算法
quanquanr
这个作者很懒,什么都没留下…
展开
-
二分法搜索 - python
二分法搜索 学习来源:b站 python分享站 二分法搜索代码如下: def binary_search(li, val): # left right mid 都是索引值 left = 0 right = len(li) - 1 while left <= right: mid = (left + right) // 2 if li[mid] == val: # 直接找到,返回 return mid e原创 2021-08-02 23:47:09 · 127 阅读 · 0 评论 -
希尔排序 - python
希尔排序 希尔排序时一种分组插入排序算法。 首先取一个整数d1=n/2,将元素分为d1个组,每组相邻元素之间距离为d,在各组内进行直接插入排序; 取第二个整数d2=d1/2,重复上述分组排序过程,直到di=1,即所有元素在同一组内进行直接插入排序。 希尔排序每趟并不使某些元素有序,而是使整体数据越来越接近有序,最后一趟排序使得所有数据有序。 例:取整数d = 9//2 = 4 将元素分为4组 组内进行直接插入排序 归位 取d = 4/2 = 2,分为两组,进行组内排序 d=2归位后,再取d=2/2原创 2021-07-30 17:21:12 · 205 阅读 · 0 评论 -
排序方法小结 - python
排序方法小结 快速排序、归并排序、堆排序三种排序算法的时间复杂度都是O(nlogn) 一般情况下,就运行时间而言: 快速排序 < 归并排序 < 堆排序 三种排序算法的缺点: 快速排序:极端情况下排序效率低 归并排序:需要额外的内存开销 堆排序:在快的排序算法中相对较慢 ...原创 2021-07-30 15:00:01 · 134 阅读 · 0 评论 -
归并排序 - python
归并排序 此图片来源于网络: 解决思路:如下图,列表被虚线分为两部分,左右两部分已排好序。列表最左边2记为low,最右边6为high,9为mid,左边箭头为i,右边箭头为j。比较i和j对应的元素大小,1小,把1拿出来,j右移,i对应的2小于此时j对应的3,2拿出来,i右移,再比较,依次进行。 递归思想解决左右两边没有排好序的情况。 代码: import random # 合并 def merge(li, low, mid, high): i = low j = mid + 1原创 2021-07-30 11:23:57 · 110 阅读 · 0 评论 -
堆排序 - python
堆排序 学习来源:b站 python分享站 堆排序的过程: 1、建立堆。 2、得到堆顶元素,为最大元素 3、去掉堆顶,将堆最后一个元素放到堆顶,此时可通过一次调整重新使堆有序。 4、堆顶元素为第二大元素。 5、重复步骤3,直到堆变空。 用python内置模块实现堆排序,代码如下: # 内置模块 --- 堆排序 import heapq import random li = list(range(100)) random.shuffle(li) print(li) heapq.heapify(li原创 2021-07-30 09:40:17 · 66 阅读 · 0 评论 -
快速排序 - python
快速排序 学习来源:b站 python分享站 快速排序:首先,让列表第一个元素归位。如图,一个列表,两个箭头分别表示left和right, 把5拿出来,right从右往左遍历把比5小的值移到左边,当right指向2时,2比5小,移到左边空位,然后left从左往右遍历, left指向7时,7比5大,移到右边空位,right开始左移, 依次遍历,直到 left = right,即重合, 此时把5放到重合处,左边的数都比5小,右边的数都比5大。 5归位之后,列表同样分别对5的左右两部分进行归位,比如把2原创 2021-07-29 21:50:23 · 69 阅读 · 0 评论 -
插入排序 - python
插入排序 学习来源: b站 python分享站 插入排序:以下图为例 开始时列表第一个元素看作是手里拿的牌(橙色),即5。 摸下一张牌7,7比5大,放5右边, 摸下一张4,此时5和7都比4大, 5和7往右移,把4放在5和7的左边。 依次遍历,完成排序。 代码如下: ...原创 2021-07-29 20:58:39 · 49 阅读 · 0 评论 -
选择排序 - python
选择排序 学习来源: b站 python分享站 简单版选择排序是每次从列表中遍历把最小元素拿出来存到新列表中。 简单版直接调用min()函数,代码如下: # 简单版选择排序 def select_sort_simple(li): li_new = [] for i in range(len(li)): min_val = min(li) li_new.append(min_val) li.remove(min_val) return原创 2021-07-29 10:32:31 · 57 阅读 · 0 评论 -
冒泡排序 - python
冒泡排序 如下图所示:最一开始箭头指向下标为0的(第一个)元素7(第一幅图),和下一个元素比较,7比5大往上移,上移后7比4大继续上移,直到移到下标为4的位置,此时7比8小,不再上移,箭头移到下标为5的位置,继续和下一个元素比较,8比2大,上移,8比9小,箭头移动到9,9比1大,上移,此时9作为最大值就出现在了最上面(第二幅图)。接下来进行第二轮也是从最下面开始,依次比较,进行n-1轮后完成排序(n为列表长度,最后一个元素不需要比较了所以是n-1轮)(第三幅图)。 代码如下: # 冒泡排序 def b原创 2021-07-28 16:56:37 · 72 阅读 · 0 评论