排序
冒泡
def bubbleSort(nums):
for i in range(len(nums)-1):
for j in range(len(nums)-i-1):
if nums[j]>nums[j+1]:
nums[j],nums[j+1] = nums[j+1],nums[j]
return nums
选择排序
def selectionSort(nums):
for i in range(len(nums)-1):
minIndex = i
for j in range(i+1,len(nums)):
if nums[j]<minIndex:
minIndex = j
nums[i],nums[minIndex] = nums[minIndex],nums[i]
return nums
插入排序
def insertionSort(nums):
for i in range(len(nums)-1):
curNum,preIndex = nums[i+1],i
while preIndex>=0 and curNum < nums[preIndex]:
nums[preIndex+1] = nums[preIndex]
preIndex-=1
nums[preIndex+1] = curNum
return nums
希尔排序
def shellSort(nums):
n = len(nums)
gap = n//2
while gap > 0:
for i in range(gap,n):
curNum,preIndex = nums[i],i
while preIndex >= gap and curNum < nums[preIndex-gap]:
nums[preIndex] = nums[preIndex-gap]
preIndex -= gap
nums[preIndex] = curNum
gap = gap//2
归并
def mergeSort(nums):
def merge(left,right):
result = []
i=j=0
while i< len(left) and j < (right):
if left[i]<=right[j]:
result.append[left[i]]
i+=1
else:
result.append[right[j]]
j+=1
result = result + left[i:] + right[j:]
return result
if len(nums)<=1:
return nums
mid = len(nums)//2
left = mergeSort(nums[:mid])
right = mergeSort(nums[mid:])
return merge(left,right)
快排
def quickSort(nums):
if len(nums)<=1:
return nums
pivot = nums[0]
left = [nums[i] for i in range(len(nums)) if nums[i]<=pivot]
right = [nums[i] for i in range(len(nums)) if nums[i]>pivot]
return quickSort(left)+[pivot]+quickSort(right)
堆排序
def heapSort(nums):
def adjustHeap(nums,i,size):
lchild = 2*i+1
rchild = 2*i+2
lagest = i
if lchild<size and nums[lchild]>nums[lagest]:
lagest = lchild
if rchild < size and nums[rchild]> nums[lagest]:
lagest = rchild
if lagest!=i:
nums[lagest],nums[i] = nums[i],nums[lagest]
adjustHeap(nums,lagest,size)
def buildHeap(nums,size):
for i in range(len(nums)//2)[::-1]: ## 从最后节点开始建堆
adjustHeap(nums,i,size)
size = len(nums)
buildHeap(nums,size)
for i in range(len(nums))[::-1]:
nums[0],nums[i] = nums[i],nums[0] ## 将最后的元素调整到第一个值
adjustHeap(nums,0,size) ## 从0个元素开始调整堆
return nums