找工作面试必然会被问排序的,很重要
冒泡排序、选择排序都属于交换排序,时间复杂度为n**2
插入排序、快速排序属于插入排序
def bubbleSort(lista):
"""
冒泡:没写对哦
len(arr)-1次循环;
从0到len(arr)-1-i变量,满足条件相邻交换;n**2
后面的先排序好;
"""
l = len(lista)
for i in range(l-1):
for j in range(l-i-1):
if lista[j+1] < lista[j]:
lista[j+1],lista[j]=lista[j],lista[j+1]
return alista
def selectSort(lista):
"""
选择排序:
len(arr)-1次循环;
循环找最值,最值交换,n**2
前面的先排序好
"""
l = len(lista)
for i in range(l-1):
index = i
for j in range(i+1,l):
if lista[j] < lista[i]:
index = j
if index!= i:
lista[i],lista[index]=lista[index],lista[i]
return lista
def insertSort(lista):
"""
插入排序:
遍历一遍
若遍历到的值比前面值小,则交换直至该次遍历满足preIndex>=0和arr[preIndex]>current;
"""
for i in range(1,len(lista)):
preIndex = i - 1
current = lista[i]
while preIndex >= 0 and lista[preIndex]>current:
lista[preIndex+1] = lista[preIndex]
preIndex -= 1
lista[preIndex+1] = current
return lista
def quickSort(lista,left=None,right=None):
"""
快速排序:
递归的,每次将比基准值小的插入pivot前面,pivot+1,比基准值大的不动,做好排序
pivot 左边再做一遍,pivot右边再做一遍
"""
left = 0 if not instance(left,(int,float)) else left
right = len(lista)-1 if not instance(right,(int,float)) else right
if left<right:
partitionIndex = partition(lista,left,right)
quickSort(lista,left,partitionIndex-1)
quickSort(lista,partitionIndex+a,right)
return lista
def partition(lista,left,right):
pivot = left
i = left + 1
while i <= right:
if arr[i]< arr[pivot]:
temp = arr[i]
index = i
while index >= pivot:#仅需插入到pivot前面,pivot+1
index -= 1
arr[index+1] = arr[index]
arr[pivot] = temp
pivot += 1
i += 1
return pivot