Python排序:冒泡排序,选择排序,插入排序,希尔排序
创始人
2024-02-17 10:24:45
0

编程中的交换元素逻辑:

 

# python中交换元素    有内置的三方底层逻辑 可以直接交换
a = 2
b = 3
a, b = b, a
print(a)      # a为3# 其他编程需要有一个中间的变量来转换 变量设为temp
a = 2
b = 3
temp = a  
a = b
b = temp
print(a)      # a为3

-----冒泡排序-----

相邻元素,比较大小,如果顺序不符合规则,则交换位置。  

-----冒泡排序-----list1 = [3, 6, 8, 1, 5, 4, 2]
print('list1原列表', list1)
for i in range(len(list1) - 1):for j in range(len(list1) - i - 1):if list1[j] > list1[j + 1]:  # 说明不符合(小--大)顺序,需要交换元素list1[j], list1[j + 1] = list1[j + 1], list1[j]
print('list1排序后', list1)

-----选择排序----- 

在未排序的序列中,找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中,继续寻找最小元素,放到已经排序序列的末尾。以此类推,直到所有元素均排序完毕。

-----选择排序-----list2 = [3, 6, 8, 2, 5, 4, 1]
print('list2原列表', list2)
for i in range(len(list2) - 1):min_index = ifor j in range(i + 1, len(list2)):  if list2[min_index] > list2[j]:  min_index = j  list2[min_index], list2[i] = list2[i], list2[min_index]print('list2排序后', list2)

-----插入排序-----

构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

实现逻辑

① 从第一个元素开始,该元素可以认为已经被排序

② 取出下一个元素,在已经排序的元素序列中从后向前扫描

③如果该元素(已排序)大于新元素,将该元素移到下一位置

④ 重复步骤③,直到找到已排序的元素小于或者等于新元素的位置

⑤将新元素插入到该位置后

⑥ 重复步骤②~⑤

-----插入排序-----def insertion_sort(arr):# 第一层for表示循环插入的遍数for i in range(1, len(arr)):# 当前需要插入的元素current = arr[i]# 相邻前面元素下标pre_index = i - 1# 索引>=0  当前要插入元素<前面元素while pre_index >= 0 and current < arr[pre_index]:# 前面元素索引往后移arr[pre_index + 1] = arr[pre_index]# pre_index赋值下一位前面元素的下标pre_index -= 1# 重新定义当前元素下标 为前面元素下标+1arr[pre_index + 1] = currentreturn arrlist3 = [6, 3, 8, 2, 5, 4, 1]
B = insertion_sort(list3)
print(B)

-----希尔排序-----

排序的思想:将序列,分割为若干个子序列,每个序列做插入排序当整个序列基本有序,对整体做一次插入排序 

-----希尔排序-----缩小增量排序def shell_sort(arr):# 取整计算增量(间隔)值gap = len(arr) // 2while gap > 0:# 从增量值开始遍历比较for i in range(gap, len(arr)):j = i  # 循环时 遍历前面元素下标current = arr[i]  # 当前需要插入的元素# 索引>=0  当前元素<前面元素# arr[j - gap] 遍历前面元素的下标 - 增量值 = 对应前面元素的下标while j - gap >= 0 and current < arr[j - gap]:# 前面元素索引往后移arr[j] = arr[j - gap]# pre_index赋值下一位前面元素的下标j -= gap# 重新定义当前元素下标 为前面元素下标+1arr[j] = current# 缩小增量(间隔)值gap //= 2return arrlist4 = [3, 6, 3, 18, 72, 55, 34, 1, 15, 18, 12, 11, 25]
sorted_arr = shell_sort(list4)
print(sorted_arr)

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...