顺序查找
从列表第一个元素开始,顺序进行搜索,直到找到为止。 二分查找
从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。
li = [1, 2, 3, 4, 5, 6, 7, 8, 9]
val = 5
def search(li, val):
low = 0
high = len(li) - 1
while low <= high:
mid = (low + high) // 2
if val == li[mid]:
return mid
elif val < li[mid]:
high = mid + 1
else:
low = mid - 1
return 'no' print(search(li, val))
排序low B三人组:
冒泡排序
# 最好情况O(n) 平均情况O(n^2) 最坏情况O(n^2)
li = [1, 12, 4, 7, 88, 22, 4, 8, 23]

for i in range(len(li) - 1):
exchange = False
for j in (range(len(li) - i - 1)):
# 前一项与后一项比大小,大的交换排到后边去
if li[j] > li[j + 1]:
li[j], li[j + 1] = li[j + 1], li[j]
exchange = True
if not exchange:
break print(li)
选择排序
li = [1, 12, 4, 7, 88, 22, 4, 8, 23]

for i in range(0, len(li) - 1):
mini = i
for j in range(i, len(li)):
# 选择一个最小的记录
if li[j] < li[mini]:
mini = j
# 将当前位置于最小的交换
li[i], li[mini] = li[mini], li[i]
print(li)
插入排序
li = [1, 12, 4, 7, 88, 22, 4, 8, 23]
for i in range(1, len(li)):
tem = li[i]
j = i - 1
# 取一个数,插入到比他小的数的位置的后边,其他的数的下标向后移动
while j > 0 and li[j] > tem:
li[j + 1] = li[j]
j -= 1
li[j + 1] = tem
print(li)
排序NB三人组:
快速排序
import random

def quick_sort(li, left, right):
if left < right:
mid = partition(li, left, right)
# 左边排序
quick_sort(li, left, mid - 1)
# 右边排序
quick_sort(li, mid + 1, right) # 大小数据分开,返回下角标
def partition(li, left, right):
tem = li[left]
while left < right:
while li[right] >= tem and left < right:
right -= 1
li[left] = li[right]
while li[left] <= tem and left < right:
left += 1
li[right] = li[left]
li[left] = tem
return left # 减少递归深度[1000,999,....,0]
def random_partition(li, left, right):
i = random.randint(left, right)
li[i], li[left] = li[left], li[i]
return partition(li, left, right) if __name__ == '__main__':
li = [random.randint(0, 10000) for i in range(1000)]
print(li)
quick_sort(li, 0, len(li) - 1)
print(li)

更快的方法(空间复杂度-高)

def quick_sort2(li):
if len(li) < 2:
return li
tmp = li[0]
left = [v for v in li[1:] if v <= tmp]
right = [v for v in li[1:] if v > tmp]
left = quick_sort2(left)
right = quick_sort2(right)
return left + [tmp] + right
堆排序
归并排序
没什么人用的排序:
基数排序
希尔排序
桶排序

最新文章

  1. 解决eclipse中svn插件总是提示输入密码的问题
  2. 【Python数据分析】Python3多线程并发网络爬虫-以豆瓣图书Top250为例
  3. 画布清理////////////////////////////zzzz
  4. Scala 的确棒
  5. Wtl之奇技淫巧篇:一、SDI如何居中显示视图
  6. 课题:如何培养自己的SEO资源
  7. JavaScript中“javascript:void(0) ”是什么意思
  8. Spring MVC整合Velocity
  9. Linux性能统计工具
  10. jquery经常使用事件(整理)
  11. 如何修改script.bin/script.fex
  12. Luogu1574 超级数
  13. C#中委托和事件的区别
  14. Mysql简单入门
  15. LeetCode题解之 Convert Sorted Array to Binary Search Tree
  16. 前端项目模块化的实践3:使用 TypeScript 的收益
  17. fhq treap 学习笔记
  18. App实现开机启动
  19. MySQL中关于SQL注入的相关需要的基础知识
  20. FIS常用功能之资源压缩

热门文章

  1. BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP
  2. robotframework之APP混合H5自动化测试
  3. LNMP+Zabbix的安装与部署
  4. CSS中style用法详解
  5. pair运用
  6. asp.net MVC 单选按钮的使用
  7. E20180404-hm
  8. C++经典面试题库 附带参考答案
  9. MAC下如何配置Android手机调试(将测试手机加入到Mac系统的调试列表中)
  10. ionic4+angular7+cordova上传图片