快速排序
# 获取基准值的最终索引位置
def getIndex(arr,low,high):
# 使用第一个元素作为基准值
key = arr[low]
while low < high: # 当数组长度不为空时
# 从尾部开始与基准值进行比较
while low < high and key <= arr[high]:
# 元素值比基准值大,不需要进行移动
high = high - 1
# 元素值比基准值小,移动到头部
arr[low] = arr[high]
# 转换比较的方向,从头部开始取值
while low < high and arr[low] <= key:
# 头部元素比基准值小,不做移动
low = low + 1
# 头部元素比基准值大,移动到后面
arr[high] = arr[low]
# 当low和high重合的时候,low的位置就是基准值的最终位置
arr[low] = key
return low # 返回low的索引位置
# 使用递归方法进行快速排序
def quickSort(arr,low,high):
if low < high:
key = getIndex(arr,low,high)
quickSort(arr,low,key-1)
quickSort(arr,key+1,high)
if __name__ == '__main__':
a = [1,5,4,7,8,2,6,5,4,1,256,78,414,12,36]
quickSort(a,0,len(a)-1)
print(a)
"""
在来亿遍
"""
def getIndex(arr,low,high):
# 首先把基准拿到
key = arr[high]
# 使用i来记录头部索引
i = low - 1
# 开始遍历数组
for j in range(low,high):
# 如果遍历元素比基准值小,移动到头部
if arr[j] <= key:
i = i + 1
arr[i],arr[j] = arr[j],arr[i]
# 如果遍历元素比基准值大,则位置不变
# 最后i+1的索引位置就是基准值的最终位置
arr[i+1],arr[high] = arr[high],arr[i+1]
return i+1
def quickSort(arr,low,high):
if low < high:
key = getIndex(arr,low,high)
quickSort(arr,low,key-1)
quickSort(arr,key+1,high)
if __name__ == '__main__':
a = [3, 6, 8, 19, 1, 5]
quickSort(a,0,len(a)-1)
print(a)