排序算法练习 [python]
快排
def quicksort(L,low,high):
if low < high :
pivot = partition(L,low,high)
quicksort(L,low,pivot-1)
quicksort(L,pivot+1,high)
return L
def partition(L,low,high):
pivot = L[low]
while low<high :
while pivot<=L[high] and low<high :
high -= 1
if low < high:
L[low] = L[high]
low += 1
while pivot>=L[low] and low<high :
low += 1
if low < high:
L[high] = L[low]
high -= 1
L[low] = pivot
return low
插入排序:i从1到n循环,循环一次将前i个数排好序,第i+1次循环,比L[i+1]大的数依次往右移,将第i+1个数插入到前i个排好序的队列中。复杂度O(n2)。稳定。
def insertsort(L):
for i in range(1,len(L)):
key = L[i]
j = i-1
while j>=0 and L[j]>key:
L[j+1] = L[j]
j -= 1
L[j+1] = key
return L
选择排序:i从1到n循环,循环一次将前i个数排好序,每次循环i后面的数,选择最小的一个,与i+1交换位置,属于交换排序。复杂度O(n2)。不稳定。
def selectsort(L):
for i in range(1,len(L)):
key = i
for j in range(i,len(L)):
if L[j]<L[key]:
key = j
L[i],L[key] = L[key],L[i]
return L
冒泡排序
def bublesort(L):
for i in range(len(L)):
for j in range(len(L)-i-1):
if L[j]>L[j+1]:
L[j],L[j+1] = L[j+1],L[j]
return L