import time
#quick sort: give a value to make data before it is less than。给定指针i,j,j从[start,end), str[j]<key,与str[i]交换,保证i及i前的值都<key,i+1后的>=key。重设i+1
def partition(str,start_index,end_index):
key=str[end_index]
i=start_index-1
for j in range(start_index,end_index): #
if str[j]<key:
i+=1
tmp=str[j]
str[j]=str[i]
str[i]=tmp
str[end_index]=str[i+1]
str[i+1]=key
return i+1
def quickSort(str,start_index,end_index):
if start_index<end_index:
k=partition(str,start_index,end_index)
quickSort(str,start_index,k-1)
quickSort(str,k+1,end_index)
#快速排序,i=0,j=N-1,第一个数组元素为关键数据,从j开始向前搜索(j--),找到第一个小于key的元素,str[i]=str[j];从i开始向后搜索(i++),找到第一个大于key的元素,str[j]=str[i]
def partition2(str,start_index,end_index):
i=start_index
j=end_index
while i<j:
while i<j and str[i]<=str[j]: #str[0]设定为关键元素,从右向左找key
j-=1
if i<j:
temp=str[i]
str[i]=str[j]
str[j]=temp
while i<j and str[i]<=str[j]: #此时key为str[j],从左向右找
i=i+1
if i<j:
temp=str[i]
str[i]=str[j]
str[j]=temp
return i
def quickSort2(str,start_index,end_index):
if start_index<end_index:
k=partition2(str,start_index,end_index)
quickSort2(str,start_index,k-1)
quickSort2(str,k+1,end_index)
#给定指针i,j,j从[end,start), str[j]>=key,与str[i]交换,保证i及i后的值都>=key,i-1前的<key。重设i-1
def partition1(str,start_index,end_index):
key=str[start_index]
i=end_index+1
for j in range(end_index,start_index,-1):
if str[j]>=key:
i-=1
tmp=str[j]
str[j]=str[i]
str[i]=tmp
#tmp=str[start_index]
str[start_index]=str[i-1]
str[i-1]=key
return i-1
def quickSort1(str,start_index,end_index):
if start_index<end_index:
k=partition1(str,start_index,end_index)
quickSort1(str,start_index,k-1)
quickSort1(str,k+1,end_index)
str=[49,27,38,1,13,76,97,65]
beginTime=time.clock()
quickSort(str,0,len(str)-1)
endTime=time.clock()
print("快速排序")
print(str)
print(endTime-beginTime)
str=[49,27,38,1,13,76,97,65]
beginTime=time.clock()
quickSort1(str,0,len(str)-1)
endTime=time.clock()
print("快速排序1")
print(str)
print(endTime-beginTime)
str=[49,27,49,3,38,1,13,76,97,65]
beginTime=time.clock()
quickSort2(str,0,len(str)-1)
endTime=time.clock()
print("快速排序2")
print(str)
print(endTime-beginTime)
python实现快速排序
最新推荐文章于 2024-01-29 09:15:00 发布