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

python排序算法

排序是指以特定格式排列数据。 排序算法指定按特定顺序排列数据的方式。 最常见的排序是数字或字典顺序。
排序的重要性在于,如果数据是以分类方式存储,数据搜索可以优化到非常高的水平。 排序也用于以更易读的格式表示数据。 下面来看看python中实现的5种排序方式。

  • 冒泡排序
  • 合并排序
  • 插入排序
  • 希尔排序
  • 选择排序

冒泡排序

它是一种基于比较的算法,其中每对相邻元素进行比较,如果元素不合适,元素将进行交换。

def bubblesort(list):# Swap the elements to arrange in orderfor iter_num in range(len(list)-1,0,-1):for idx in range(iter_num):if list[idx]>list[idx+1]:temp = list[idx]list[idx] = list[idx+1]list[idx+1] = templist = [19,2,31,45,6,11,121,27]
bubblesort(list)
print(list)

执行上面示例代码,得到以下结果 -

[2, 6, 11, 19, 27, 31, 45, 121]

合并排序

合并排序首先将数组分成相等的一半,然后以排序的方式组合它们。参考以下代码实现 -

def merge_sort(unsorted_list):if len(unsorted_list) <= 1:return unsorted_list
# Find the middle point and devide itmiddle = len(unsorted_list) // 2left_list = unsorted_list[:middle]right_list = unsorted_list[middle:]left_list = merge_sort(left_list)right_list = merge_sort(right_list)return list(merge(left_list, right_list))# Merge the sorted halvesdef merge(left_half,right_half):res = []while len(left_half) != 0 and len(right_half) != 0:if left_half[0] < right_half[0]:res.append(left_half[0])left_half.remove(left_half[0])else:res.append(right_half[0])right_half.remove(right_half[0])if len(left_half) == 0:res = res + right_halfelse:res = res + left_halfreturn resunsorted_list = [64, 34, 25, 12, 22, 11, 90]print(merge_sort(unsorted_list))

执行上面示例代码,得到以下结果 -

[11, 12, 22, 25, 34, 64, 90]

插入排序

插入排序包括为排序列表中的给定元素找到正确的位置。 所以在开始时比较前两个元素并通过比较来对它们进行排序。 然后选取第三个元素,并在前两个排序元素中找到它的正确位置。 通过这种方式,逐渐将更多元素添加到已排序的列表中,并将它们置于适当的位置。
参考下面代码的实现 -

def insertion_sort(InputList):for i in range(1, len(InputList)):j = i-1nxt_element = InputList[i]
# Compare the current element with next onewhile (InputList[j] > nxt_element) and (j >= 0):InputList[j+1] = InputList[j]j=j-1InputList[j+1] = nxt_elementlist = [19,2,31,45,30,11,121,27]
insertion_sort(list)
print(list)

执行上面示例代码,得到以下结果 -

[2, 11, 19, 27, 30, 31, 45, 121]

希尔排序

希尔排序涉及排序远离其他的元素。对给定列表的大型子列表进行排序,并继续缩小列表的大小,直到所有元素都被排序。 下面的程序通过将其等于列表大小的一半来找到间隙,然后开始对其中的所有元素进行排序。 然后不断重置差距,直到整个列表被排序。

def shellSort(input_list):gap = len(input_list) / 2while gap > 0:for i in range(gap, len(input_list)):temp = input_list[i]j = i
# Sort the sub list for this gapwhile j >= gap and input_list[j - gap] > temp:input_list[j] = input_list[j - gap]j = j-gapinput_list[j] = temp# Reduce the gap for the next elementgap = gap/2list = [19,2,31,45,30,11,121,27]shellSort(list)
print(list)

执行上面示例代码,得到以下结果 -

[2, 11, 19, 27, 30, 31, 45, 121]

选择排序

在选择排序中,首先查找给定列表中的最小值并将其移至排序列表。 然后为未排序列表中的每个剩余元素重复该过程。 输入排序列表的下一个元素将与现有元素进行比较并放置在正确的位置。 所以最后所有来自未排序列表的元素都被排序。参考以下代码实现 -

def selection_sort(input_list):for idx in range(len(input_list)):min_idx = idxfor j in range( idx +1, len(input_list)):if input_list[min_idx] > input_list[j]:min_idx = j
# Swap the minimum value with the compared valueinput_list[idx], input_list[min_idx] = input_list[min_idx], input_list[idx]l = [19,2,31,45,30,11,121,27]
selection_sort(l)
print(l)

执行上面示例代码,得到以下结果 -

[2, 11, 19, 27, 30, 31, 45, 121]
http://www.lryc.cn/news/19686.html

相关文章:

  • 【C++入门第二期】引用 和 内联函数 的使用方法及注意事项
  • 数据结构——顺序表讲解
  • Redis 主从复制-服务器搭建【薪火相传/哨兵模式】
  • 数据库|(五)分组查询
  • Orin安装ssh、vnc教程
  • Allegro如何快速删除孤立铜皮操作指导
  • 从单管单色到单管RGB,这项MicroLED工艺不可忽视
  • 6-Java中新建一个文件、目录、路径
  • Bootstrap系列之Flex布局
  • 匈牙利算法与KM算法的区别
  • You Only Need 90K Parameters to Adapt Light 论文阅读笔记
  • 【vue2小知识】实现axios的二次封装
  • 走近php的数组:数组的定义与数组函数
  • Docker 应用实践-仓库篇
  • python+django篮球NBA周边商城vue
  • 抽象类与接口的区别
  • 1904. 你完成的完整对局数
  • Vue3:自定义指令以及简单的后台管理权限封装
  • 剑指 Offer 12. 矩阵中的路径
  • springboot+jersey+tomcat实现跨域方式上传文件到服务器
  • 【微信小程序】-- 常用视图容器类组件介绍 -- view、scroll-view和swiper(六)
  • 猜数字游戏——C++
  • 整数对最小和
  • 2023-2-22 -javaagent
  • JavaScript BOM操作
  • 【机器学习 | 强基计划】开山篇 | 机器学习介绍及其类别和概念阐述
  • 华为OD机试真题Java实现【合规数组】真题+解题思路+代码(20222023)
  • BoostSearcher搜索引擎项目
  • 【模拟集成电路】频率综合器(Frequency Synthesizer,FS)设计
  • 实例8:机器人的空间描述和变换仿真