一:三种比较LOW的排序算法
1、冒泡排序:
冒泡算法的时间复杂度为o(n2),有两个循环,外层循环为趟数,循环的趟数为数组长度值减一,因为最后剩一个元素时,不用比较了,所以减一(趟数大了,超过这个数计算结果仍然正确,只是计算的时间会加长)。内层循环为下标移动比较的范围,一次比较选择两个下标因此(j+1)为每一趟比较的后一个数,j+1最多到达每一趟的最后一个元素。
代码实现:
def bubble_sort(li):
"""
升序排列,降序排列把加号改为减号
:param li: 输入的乱序列表
:return: 原地改变列表的值
"""
# 趟数,比列表长度少1,为最后个元素下标
for i in range(len(li)-1):
# j的循环范围,j在j+1前,为每趟循环的最后元素位置,第一次循环时,两个range内的值相等
for j in range(len(li)-i-1):
if li[j] > li[j+1]:
li[j], li[j+1] = li[j+1], li[j]
2、选择排序
两种写代码的思路:
1、依次将该元素和后面的元素比较,如果出现后面的元素小于前面的元素则交换,一趟比较完成后,往后移,再依次比较。
2、找到需要比较的元素中最小的元素,将最小元素和需要保存该元素的位置的元素交换
代码实现:
1、
def selection_sort(li):
"""
选择排序,
:param li: 输入乱序列表
:return: 原地排序
"""
for i in range(len(li)-1):#需要确定的最小元素的位置,该位置之前有序区。开始时,在0号元素之前没有元素,所有的均为无序区
for j in range(i+1,len(li)):#上述位置后的元素位置,在上述位置和之后的位置为无序区
if li[i] > li[j]:
li[i], li[j] = li[j], li[i]
2、
def selection_sort1(li):
for i in range(len(li)-1):
temp = li[i]
a = i
for j in range(i+1,len(li)):
if temp > li[j]: temp = li[j] a = j li[a] = li[i] li[i] = temp
相比较第二种思路,思路比较麻烦,代码也比较麻烦。不用管第二种,知道就行。第二种方法多了中间变量,有点类似于c语言的交换,这种写法更适合c语言。