一、冒泡排序
- 算法说明
(1)比较相邻的元素,如果第一个比第二个大,就进行交换;
(2)对每一对乡里元做同样操作,直到最后一对,最后的元素应该是最大的数;
(3)循环步骤(1)(2)直到每一任何一对数字需要比较。 - 代码:
# 冒泡排序
def bubble_sort(listx):
xlen = len(listx) # 列表长度
for i in range(xlen-1):
for j in range(xlen-1-i):
if listx[j]>listx[j+1]: # 前一个数值和后一个数值进行比较
listx[j], listx[j+1] = listx[j+1], listx[j]
return listx
if __name__ == "__main__":
L = [34,123,12,34,545]
print(bubble_sort(L))
执行结果:
[12, 34, 34, 123, 545]
二、插入排序
- 算法说明
插入排序算法是基于某序列已经有序排列的情况下,通过一次插入一个元素的方式按照原有排序方式增加元素。这种比较是从该有序序列的最末端开始执行,即要插入序列中的元素最先和有序序列中最大的元素比较,若其大于该最大元素,则可直接插入最大元素的后面即可,否则再向前一位比较查找直至找到应该插入的位置为止。插入排序的基本思想是,每次将1个待排序的记录按其关键字大小插入到前面已经排好序的子序列中,寻找最适当的位置,直至全部记录插入完毕。执行过程中,若遇到和插入元素相等的位置,则将要插人的元素放在该相等元素的后面,因此插入该元素后并未改变原序列的前后顺序。
简单理解:
将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数。即:序列的第一个元素,肯定是有序的,把第二个元素和第一个元素相比,插入到合适的位置,这样前两个元素就有序了,接着,把第三个元素插入到前面包含两个元素的有序列表中,以此类推,直至插完第n个数据。
2. 代码:
# 插入排序
def insertSort(listx):
xlen = len(listx)
for i in range(1, xlen):
j = i - 1
# 把listx[i]和前面的元素逐一进行比较
while j>=0:
# 当第二个数小于前一个数时,插入到合适的位置
if listx[j]>listx[j+1]:
listx[j], listx[j+1] = listx[j+1], listx[j]
j -= 1
return listx
if __name__ == '__main__':
print(insertSort([77,45,34,3,454]))
执行结果:
[3, 34, 45, 77, 454]
执行时数据的交换过程:
45与77交换位置后列表:[45, 77, 34, 3, 454]
34与77交换位置后列表:[45, 34, 77, 3, 454]
34与45交换位置后列表:[34, 45, 77, 3, 454]
3与77交换位置后列表:[34, 45, 3, 77, 454]
3与45交换位置后列表:[34, 3, 45, 77, 454]
3与34交换位置后列表: