排序算法与查找算法
时间:2022-07-24
本文章向大家介绍排序算法与查找算法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
排序算法
冒泡排序
- 时间复杂度:O(n²)
- 空间复杂度:O(1)
- 健壮性:健壮
- 难易程度:简单
def bubbleSort(li):
for i in range(len(li) - 1):
for j in range(len(li) - i - 1):
if li[j] > li[j + 1]:
li[j], li[j + 1] = li[j + 1], li[j]
li = [345, 456, 68.435, 1, 6, 4, 568, ]
bubbleSort(li)
print(li)
选择排序
- 时间复杂度:O(n²)
- 空间复杂度:O(1)
- 健壮性:健壮
- 难易程度:简单
def selectSort(li):
for i in range(len(li) - 1):
min = I # 选择一个小的来比较
for j in range(i + 1, len(li)):
if li[min] > li[j]:
li[min], li[j] = li[j], li[min]
li = [345, 456, 68.435, 1, 6, 4, 568, ]
selectSort(li)
print(li)
插入排序
- 时间复杂度:O(n²)
- 空间复杂度:O(1)
- 健壮性:健壮
- 难易程度:较复杂
def insertSort(li):
for i in range(len(li) - 1):
temp = li[i]
j = i - 1
while j >= 0 and li[j] > temp:
li[j + 1] = li[j]
j = j - 1
li[j + 1] = temp
li = [345, 456, 68.435, 1, 6, 4, 568, ]
insertSort(li)
print(li)
快速排序
- 时间复杂度:O(nlogn)
- 空间复杂度:O(nlogn)
- 健壮性:不稳定
- 难易程度:复杂
# 二分左右
def partition(list_for_partition, left, right):
# 中轴点
pivot = list_for_partition[left]
while left < right:
while left < right and list_for_partition[right] >= pivot:
right -= 1
list_for_partition[left] = list_for_partition[right]
while left < right and list_for_partition[left] <= pivot:
left += 1
list_for_partition[right] = list_for_partition[left]
list_for_partition[left] = pivot
return left
# 快速排序
def sort_quickly(list_for_partition, left, right):
if left < right:
pivot = partition(list_for_partition, left, right)
sort_quickly(list_for_partition, left, pivot - 1)
sort_quickly(list_for_partition, pivot + 1, right)
return list_for_partition
# 输出结果
def output_sort_result(list_for_partition):
return sort_quickly(list_for_partition, 0, len(list_for_partition) - 1)
堆排序
- 时间复杂度:O(nlog₂n)
- 空间复杂度:O(1)
- 健壮性:不稳定
- 难易程度: 困难
def heap_sort(array):
def heap_adjust(parent):
child = 2 * parent + 1 # left child
while child < len(heap):
if child + 1 < len(heap):
if heap[child + 1] > heap[child]:
child += 1 # right child
if heap[parent] >= heap[child]:
break
heap[parent], heap[child] =
heap[child], heap[parent]
parent, child = child, 2 * child + 1
heap, array = array.copy(), []
for i in range(len(heap) // 2, -1, -1):
heap_adjust(i)
while len(heap) != 0:
heap[0], heap[-1] = heap[-1], heap[0]
array.insert(0, heap.pop())
heap_adjust(0)
return array
查找算法
顺序查找
二分查找
- SQL Server 深入解析索引存储(下)
- 2751: [HAOI2012]容易题(easy)
- codevs3002 石子归并 3
- 算法模板——计算几何2(二维凸包——Andrew算法)
- 算法模板——splay区间反转 2
- 算法模板——Dinic网络最大流 2
- 1935: [Shoi2007]Tree 园丁的烦恼
- 1339 / 1163: [Baltic2008]Mafia
- 4010: [HNOI2015]菜肴制作
- 4052: [Cerc2013]Magical GCD
- ElasticSearch搜索引擎在SpringBoot中的实践
- 2292: 【POJ Challenge 】永远挑战
- 四边形不等式优化DP
- 4063: [Cerc2012]Darts
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法