python选择排序算法_Python - 排序算法
排序是指以特定格式排列数据。排序算法指定按特定顺序排列数据的方式。最常见的订单是数字或字典顺序。
排序的重要性在于如果数据以分类方式存储,数据搜索可以优化到非常高的水平。排序也用于以更易读的格式表示数据。下面我们看到五个这样的python排序实现。
冒泡排序
合并排序
插入排序
希尔排序
选择排序
冒泡排序
它是一种基于比较的算法,其中每对相邻元素进行比较,如果元素不合适,元素将进行交换。
def bubblesort(list):
# Swap the elements to arrange in order
for 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] = temp
list = [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 it
middle = len(unsorted_list) // 2
left_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 halves
def 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_half
else:
res = res + left_half
return res
unsorted_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-1
nxt_element = InputList[i]
# Compare the current element with next one
while (InputList[j] > nxt_element) and (j >= 0):
InputList[j+1] = InputList[j]
j=j-1
InputList[j+1] = nxt_element
list = [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) / 2
while gap > 0:
for i in range(gap, len(input_list)):
temp = input_list[i]
j = i
# Sort the sub list for this gap
while j >= gap and input_list[j - gap] > temp:
input_list[j] = input_list[j - gap]
j = j-gap
input_list[j] = temp
# Reduce the gap for the next element
gap = gap/2
list = [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 = idx
for 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 value
input_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]
python选择排序算法_Python - 排序算法相关推荐
- python归并算法_python归并算法
python数据结构与算法总结 python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: <数据结构和算法对python意味着什么?> <顺序表数据结构 ...
- python 数据挖掘 简书_python 数据挖掘算法简要
前言 数据挖掘是通过对大量数据的清理及处理以发现信息,并将这原理应用于分类,推荐系统,预测等方面的过程.本文基于<面向程序员数据挖掘指南>的理解,扩展学习后的总结.不足之处还请赐教,觉得有 ...
- python选择路径窗口_python选择路径
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 现在 python 主要在 前端 . 数据分析 两个方面比较火,相较于其它语言, ...
- python堆排序算法_python 排序 堆排序
算法思想 : 堆排序利用堆数据结构设计的一种排序算法,堆是一种近似完全二叉树的结构,同时满足堆积的性质,即对于任意的i均有ki>=k(2i+1),ki>=k(2i+2) 步骤: 将数组转化 ...
- python 归并排序算法_python基本算法之实现归并排序(Merge sort)
0.前言 评判一个算法的好坏的标准: 时间复杂度 空间复杂度 1.归并排序算法是什么? 冒泡排序(Bubble Sort)是一种建立在归并操作上面的一种有效的排序算法,由John von neuman ...
- python 英文关键词提取_python TF-IDF算法实现文本关键词提取
TF(Term Frequency)词频,在文章中出现次数最多的词,然而文章中出现次数较多的词并不一定就是关键词,比如常见的对文章本身并没有多大意义的停用词.所以我们需要一个重要性调整系数来衡量一个词 ...
- python人脸识别算法_python人脸算法
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 若图片中包含多张人脸,只选取其中人脸面积最大的人脸. 支持png.jpg.jpe ...
- python 最短路径算法_python Dijkstra算法实现最短路径问题的方法
本文借鉴于张广河教授主编的<数据结构>,对其中的代码进行了完善. 从某源点到其余各顶点的最短路径 Dijkstra算法可用于求解图中某源点到其余各顶点的最短路径.假设G={V,{E}}是含 ...
- python中最小公倍数函数_Python 最小公倍数算法
Python 最小公倍数算法 以下代码用于实现最小公倍数算法: # Filename : test.py # author by : www.w3cschool.cn # 定义函数 def lcm(x ...
- python实现排序函数_Python排序函数的使用方法详解
Python排序函数完美体现了Python语言的简洁性,对于List对象,我们可以直接调用sort()函数(这里称为"方法"更合适)来进行排序,而对于其他可迭代对象(如set,di ...
最新文章
- 一套代码小程序WebNative运行的探索01
- 2019年年初iOS招人心得笔记(附面试题)
- Springboot+JPA 对应关系查询时导致的堆栈溢出 :java.lang.StackOverflowError:
- Yarn取代job/task tracker
- 对象的序列化与反序列化---IO学习笔记(四)
- CSS3新特性(整理贴)
- matlab ctrb(),4.8Matlab问题能控能观解释.ppt
- 这67款APP被下架了
- Apple 企业开发者账号邓白氏码申请记录 ----转
- 知道硬盘很慢,但没想到比 CPU Cache 慢 10000000 倍!
- 什么是Redis缓存雪崩、缓存穿透和缓存击穿
- html 文件对比,文件内容差异对比方法
- 面试中遇到的java笔试题
- delphi pi怎么得到?
- 查看windows显卡内存详细信息
- gRPC 使用自定义的 NameResolver
- android 流失布局,GitHub - hongyangAndroid/FlowLayout: [不再维护]Android流式布局,支持单选、多选等,适合用于产品标签等。...
- php cms 公文,POSCMS文件信息查看
- Scratch-(六)-妙笔生花
- Penetration_Testing_POC-About 渗透测试有关的POC、EXP、脚本、提权、小工具等