当前位置: 首页 > news >正文

【排序算法 python实现】

排序算法 python实现 / 默写

# 汉诺塔
import copy
import randomdef hanuo(n, a, b, c):if n == 1:print(f'{a} --> {c}')returnhanuo(n - 1, a, c, b)print(f'{a} --> {c}')hanuo(n - 1, b, a, c)hanuo(3, 'A', 'B', 'C')# 冒泡排序
def bubble_sort(arr):n = len(arr)for i in range(n - 1):for j in range(n - 1 - i):if arr[j] > arr[j + 1]:arr[j], arr[j + 1] = arr[j + 1], arr[j]return arrdef jiWeiJiu(arr):n = len(arr)for i in range(n // 2):flag = Falsefor m in range(i, n - 1 - i):if arr[m] > arr[m + 1]:arr[m], arr[m + 1] = arr[m + 1], arr[m]flag = Trueif not flag:breakflag = Falsefor q in range(n - i - 2, i, -1):if arr[q - 1] > arr[q]:arr[q - 1], arr[q] = arr[q], arr[q - 1]flag = Trueif not flag:breakreturn arrdef choose_sort(arr):n = len(arr)"""0 1 2 3 4 5n = 6"""for i in range(n - 1):min_index = ifor j in range(i + 1, n):if arr[min_index] > arr[j]:min_index = jif min_index != i:arr[min_index], arr[i] = arr[i], arr[min_index]return arr# 3. 插入
def insert_sort(arr):n = len(arr)for i in range(1, n):j = i - 1tmp = arr[i]while j >= 0 and tmp < arr[j]:arr[j + 1] = arr[j]j -= 1arr[j + 1] = tmpreturn arrdef merge(arr, left, mid, right):i = leftj = mid + 1tmp = []while i <= mid and j <= right:if arr[i] < arr[j]:tmp.append(arr[i])i += 1else:tmp.append(arr[j])j += 1while i <= mid:tmp.append(arr[i])i += 1while j <= right:tmp.append(arr[j])j += 1arr[left: right + 1] = tmpdef merge_sort(arr, left, right):if left < right:mid = (left + right) // 2# 假设左边右边都已经排好了merge_sort(arr, left, mid)merge_sort(arr, mid + 1, right)merge(arr, left, mid, right)return arr# 5. 快速
def partition(arr, left, right):tmp = arr[left]while left < right:while left < right and arr[right] >= tmp:right -= 1arr[left] = arr[right]while left < right and arr[left] <= tmp:left += 1arr[right] = arr[left]arr[left] = tmpreturn leftdef quick_sort(arr, left, right):if left < right:mid = partition(arr, left, right)quick_sort(arr, left, mid - 1)quick_sort(arr, mid + 1, right)return arr# 定顶调整,大顶堆
# 以后不用 i j 用 p q
def sift(arr, low, high):i = lowtmp = arr[low]j = 2 * i + 1# 最小三角while j <= high:if j + 1 <= high and arr[j] < arr[j + 1]:j = j + 1if tmp < arr[j]:arr[i] = arr[j]i = jj = 2 * i + 1else:breakarr[i] = tmpreturn arrdef heap_sort(arr):n = len(arr)# 农村包围城市# 依次处理每个顶for i in range((n - 2) // 2, -1, -1):sift(arr, i, n - 1)# 挨个出数for i in range(n - 1, -1, -1):arr[0], arr[i] = arr[i], arr[0]sift(arr, 0, i - 1)return arr# 3. 插入
def insert_sort_gap(arr, gap):n = len(arr)for i in range(gap, n):j = i - gaptmp = arr[i]while j >= 0 and tmp < arr[j]:arr[j + gap] = arr[j]j -= gaparr[j + gap] = tmpreturn arrdef shell_sort(arr):n = len(arr)gap = n // 2while gap >= 1:insert_sort_gap(arr, gap)gap //= 2return arr# 8. 计数
"""
0 1 2 3 4 8
max_v = 8
0 ~ 8; [0 , 9)
"""def count_sort(arr):max_v = max(arr)bucket = [0 for _ in range(max_v + 1)]for item in arr:bucket[item] += 1arr.clear()for i in range(len(bucket)):while bucket[i] > 0:arr.append(i)bucket[i] -= 1return arrdef radix_sort(arr):if not arr:return []digit = len(str(max(arr)))for i in range(digit):bucket = [[] for _ in range(10)]  # 0 ~ 9for v in arr:k = (v // (10 ** i)) % 10bucket[k].append(v)arr.clear()for bu in bucket:arr.extend(bu)return arrdef bucket_sort(arr, n=100, max_v=10000):bucket = [[] for _ in range(n)]for v in arr:i = min(v // (max_v // n), n - 1)bucket[i].append(v)for j in range(len(bucket[i]) - 1, 0, -1):if bucket[i][j] < bucket[i][j - 1]:bucket[i][j], bucket[i][j - 1] = bucket[i][j - 1], bucket[i][j]else:breakarr.clear()for bu in bucket:arr.extend(bu)return arrli = [random.randint(0, 100) for _ in range(10)]
li1 = copy.deepcopy(li)
li2 = copy.deepcopy(li)
li3 = copy.deepcopy(li)
li4 = copy.deepcopy(li)
li5 = copy.deepcopy(li)
li6 = copy.deepcopy(li)
li7 = copy.deepcopy(li)
li8 = copy.deepcopy(li)
li9 = copy.deepcopy(li)
li10 = copy.deepcopy(li)
li11 = copy.deepcopy(li)print('冒泡:', bubble_sort(li1))
print('鸡尾:', jiWeiJiu(li2))
print('选择:', choose_sort(li3))
print('插入:', insert_sort(li4))
print('归并:', merge_sort(li5, 0, len(li5) - 1))
print('快速:', quick_sort(li6, 0, len(li5) - 1))
print('堆排:', heap_sort(li7))
print('希尔:', shell_sort(li8))
print('计数:', count_sort(li9))
print('基数:', radix_sort(li10))
print('桶排:', bucket_sort(li11))

最近有点水逆,心理有点低落
加油吧 🍀

http://www.lryc.cn/news/492147.html

相关文章:

  • Java图书管理系统(简易保姆级)
  • 嵌入式硬件设计:从概念到实现的全流程
  • 第 4 章 Java 并发包中原子操作类原理剖析
  • 从 0 到 1 掌握部署第一个 Web 应用到 Kubernetes 中
  • 政安晨【零基础玩转各类开源AI项目】探索Cursor-AI Coder的应用实例
  • CentOS 7 安装部署 KVM
  • ArcGIS 10.2软件安装包下载及安装教程!
  • 一个专为云原生环境设计的高性能分布式文件系统
  • 基于深度学习CNN算法的花卉分类识别系统01--带数据集-pyqt5UI界面-全套源码
  • 3174、清除数字
  • C++ 优先算法 —— 无重复字符的最长子串(滑动窗口)
  • ADS学习笔记 6. 射频发射机设计
  • 上海乐鑫科技一级代理商飞睿科技,ESP32-C61高性价比WiFi6芯片高性能、大容量
  • QT QRadioButton控件 全面详解
  • 51单片机从入门到精通:理论与实践指南(一)
  • 零基础3分钟快速掌握 ——Linux【终端操作】及【常用指令】Ubuntu
  • C#中面试的常见问题007
  • 人工智能——大语言模型
  • nodejs第三方库sharp对图片的操作生成新图片、压缩、添加文字水印及图片水印等
  • 力扣第 67 题 “二进制求和”
  • Spring Boot优雅读取配置信息 @EnableConfigurationProperties
  • 鸿蒙多线程开发——Sendable对象的序列化与冻结操作
  • nodepad配置c/c++ cmd快速打开创建项目文件
  • 【C++】读取数量不定的输入数据
  • ESC字符背后的故事(27 <> 033 | x1B ?)
  • 基于NXP LS1043 OpenWRT智能交通边缘网关设计
  • 绪论相关题目
  • 中国科学院大学研究生学术英语读写教程 Unit7 Materials Science TextA 原文和翻译
  • centos系列安装服务器时分区
  • vue的理解