面试必复习系列,此处只整理模板,不梳理思路。
一、快排
def partition(an,left,right):
temp=left
while(left<right):
#从右往左找第一个小于an[temp]的数
while(left<right and an[right]>=an[temp]):
right-=1
#从左往右找第一个大于an[temp]的数
while(left<right and an[left]<=an[temp]):
left+=1
an[left],an[right]=an[right],an[left]
an[left],an[temp]=an[temp],an[left]
return left
def quick_sort(an,left,right):
if(left<right):
p=partition(an,left,right)
quick_sort(an,left,p-1)
quick_sort(an,p+1,right)
return an
s=[6,8,1,4,3,9,5,4]
sb=quick_sort(s,0,len(s)-1)
print(sb)
二、归并排序
# -*- coding: utf-8 -*-
def merge(nums,start,mid,end):
i,j,temp=start,mid+1,[]
while(i<=mid and j<=end):
if(nums[i]<=nums[j]):
temp.append(nums[i])
i+=1
else:
temp.append(nums[j])
j+=1
while