已解决
Python选择排序和冒泡排序算法
来自网友在路上 174874提问 提问时间:2023-11-21 06:57:59阅读次数: 74
最佳答案 问答题库748位专家为你答疑解惑
选择排序和冒泡排序都是常见的排序算法。以下是这两种算法的Python实现:
- 选择排序(Selection Sort)
选择排序的基本思想是在未排序的序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
Python实现如下:
- def selection_sort(arr):
- for i in range(len(arr)):
- # 找到当前未排序部分中的最小值
- min_index = i
- for j in range(i+1, len(arr)):
- if arr[j] < arr[min_index]:
- min_index = j
- # 将找到的最小值与当前i位置的值交换
- arr[i], arr[min_index] = arr[min_index], arr[i]
- return arr
- 冒泡排序(Bubble Sort)
冒泡排序的基本思想是,通过比较相邻的两个元素,如果前一个比后一个大,则交换它们的位置。这样对数组进行多次遍历,每一次遍历都把一个未排序的元素放置到了已排序的末尾,也就是逐渐"冒泡"到正确的位置。
Python实现如下:
- def bubble_sort(arr):
- n = len(arr)
- for i in range(n):
- # 最后i个元素已经有序,无需比较
- for j in range(0, n-i-1):
- if arr[j] > arr[j+1]:
- arr[j], arr[j+1] = arr[j+1], arr[j] # 交换位置
- return arr
这两种算法的时间复杂度都是O(n^2),其中n是列表的长度。这意味着,对于非常大的数据集,这些算法可能不是最高效的。有其他一些更高效的排序算法,例如快速排序、归并排序和堆排序等。
- 快速排序(Quick Sort)
快速排序是一种分治的排序算法。它将一个大的数组分成两个子数组,将两部分独立地排序。快速排序的核心思想是选择一个"基准"元素,通过一趟排序将待排序列分割成独立的两部分,其中一部分的所有元素都比另一部分的所有元素要小,然后再按此方法对这两部分继续进行排序,以达到整个序列有序。
Python实现如下:
- def quick_sort(arr):
- if len(arr) <= 1:
- return arr
- pivot = arr[len(arr) // 2]
- left = [x for x in arr if x < pivot]
- middle = [x for x in arr if x == pivot]
- right = [x for x in arr if x > pivot]
- return quick_sort(left) + middle + quick_sort(right)
- 归并排序(Merge Sort)
归并排序是另一种分治的排序算法。它将待排序的序列划分为若干个子序列,每个子序列是一个有序的序列。然后再将所有子序列合并成一个有序的序列。这个过程是递归的,每一层的归并做为一次"归并操作"。
Python实现如下:
- def merge_sort(arr):
- if len(arr) <= 1:
- return arr
- mid = len(arr) // 2
- left = merge_sort(arr[:mid])
- right = merge_sort(arr[mid:])
- return merge(left, right)
- def merge(left, right):
- result = []
- i = j = 0
- while i < len(left) and j < len(right):
- if left[i] <= right[j]:
- result.append(left[i])
- i += 1
- else:
- result.append(right[j])
- j += 1
- result += left[i:]
- result += right[j:]
- return result
查看全文
99%的人还看了
相似问题
- 【Django-DRF用法】多年积累md笔记,第3篇:Django-DRF的序列化和反序列化详解
- 【Java 进阶篇】JavaScript JSON 语法入门:轻松理解数据的序列化和反序列化
- 【python学习】基础篇-常用模块-pickle模块:序列化和反序列化
- ZC序列理论学习及仿真
- 时间序列预测实战(十七)PyTorch实现LSTM-GRU模型长期预测并可视化结果(附代码+数据集+详细讲解)
- 代码随想录算法训练营第二十九天| 491 递增子序列 46 全排列
- 最长递增子序列
- 深入解析序列模型:全面阐释 RNN、LSTM 与 Seq2Seq 的秘密
- c#Nettonsoft.net库常用的方法json序列化反序列化
- 基于C#实现最长公共子序列
猜你感兴趣
版权申明
本文"Python选择排序和冒泡排序算法":http://eshow365.cn/6-40972-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 电机应用开发-PID控制器参数整定
- 下一篇: vue3 setup展示数据