不管是python测试还是开发,在面试中常被考到排序,最常用的是冒泡排序,有的变态考题要用非冒泡排序,这里介绍三种排序方法

01冒泡排序

冒泡排序是最简单的,也是最容易理解的排序方法。思路就是一个数字依次对序列中的数据进行比较,一次比较2个数字,如果根据比较结果,判断是否需要交换位置

l1 = [1,4,5,9,76,5,43,21]

for i in range(0,len(l1)-1):
for j in range(0,len(l1)-i-1):
if l1[j] > l1[j+1]:
# temp = l1[j]
# l1[j] = l1[j+1]
# l1[j+1]= temp
l1[j],l1[j+1] = l1[j+1] ,l1[j]
print(l1)
例如我们要对列表l1进行排序,第一层循环负责列表中的每一个数,第二层循环负责数据比较,如果满足if条件就进行交换

在python中交换可以引入一个变量temp,三个变量直接相互交换,完成2数据的对调,代码中注释部分

在python中已可以使用l1[j],l1[j+1] = l1[j+1] ,l1[j]的方式,也是完成2个数据的对调

在循环的边界值方面,第一层循环要考虑到如果是每2个数据比较,最后一个数据就不用在去和它后面的比较了,因为它后面没有数据了,所以第一层循环范围(0,len(l1)-1)
第二层循环前面已经比过的数据,就不用再比较了,所以范围是range(0,len(l1)-i-1)

02选择排序

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

l1 = [1,8,3,9,4,43,21]
for i in range(len(l1)-1):
min = i
for j in range(i+1,len(l1)):
if l1[min] > l1[j]:
min = j
if min != i:
l1[min],l1[i] = l1[i],l1[min]
print(l1)
这里首先取第一元素的下标赋值给变量min,设定为最小的元素,然后从第二个元素开始依次和这个最小元素进行比较,如果比较满足if的条件,就把最小元素的下标赋值给min,一轮比较完成后,如果min和所比较的元素下标不同,就进行数据对调

03快排

快排从数列中挑出一个元素,称为 “基准”;

重新排序数列,所有元素比基准值小的摆放在基准前面,

所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。

在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作

递归地把小于基准值元素的子数列和大于基准值元素的子数列排序

def fun(list1):
if list1 == []:
return []
else:
first = list1[0]
less = fun([i for i in list1[1:] if i < first])
more = fun([j for j in list1[1:] if j > first])
return less + [first] + more
l1 = [5,4,15,9,76,5,43,21]
a = fun(l1)
print(a)

如果这篇文章对你有所启发,点赞、转发都是一种支持
Python面试知识_排序

相关文章:

  • 2021-11-27
  • 2021-09-12
  • 2021-05-26
  • 2021-10-26
  • 2021-12-19
  • 2022-02-17
  • 2022-12-23
  • 2022-01-18
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-18
  • 2022-12-23
  • 2021-05-08
相关资源
相似解决方案