快速排序

第一次用python写快排···感觉不是很熟,还是要多练QAQ

import random

def quickSort(array,lo,hi):#左闭右bi
#    print(array)
#    print("lo:"+str(lo))
#    print("hi:"+str(hi))
    if lo>hi:
        return
    seed=array[lo]#选取标准位
    l=lo
    h=hi
    while(l<h):
        while(l<h and array[h]>=seed):#从右向左寻找第一个比标准位小的
            h=h-1
        while(l<h and array[l]<=seed):#从左向右寻找第一个比标准位大的
            l=l+1
        if(l<h):#交换两者位置,并继续进行循环
            tmp=array[l]
            array[l]=array[h]
            array[h]=tmp
            continue
#    print("l:"+str(l))
#    print("h:"+str(h))
#将标准位换到分界线处
    array[lo]=array[l]
    array[l]=seed
    quickSort(array,lo,l-1)#递归,闭区间,因此不需要再搜标准位了
    quickSort(array,l+1,hi)
    return

#arr=[3,1,2,5,4]
#quickSort(arr,0,len(arr)-1)
#print(arr)

def quickSortRandom(array,lo,hi):#和上一个函数相比,增加了随机数
    if lo>hi:
        return
    s=random.randint(lo,hi)
#    print(str(lo)+" "+str(hi)+" "+str(s))
    tmp=array[lo]
    array[lo]=array[s]
    array[s]=tmp

    seed=array[lo]
    l=lo
    h=hi
    while(l<h):
        while(l<h and array[h]>=seed):
            h=h-1
        while(l<h and array[l]<=seed):
            l=l+1
        if(l<h):
            tmp=array[l]
            array[l]=array[h]
            array[h]=tmp
            continue
    array[lo]=array[l]
    array[l]=seed
    quickSortRandom(array,lo,l-1)
    quickSortRandom(array,l+1,hi)
    return


N=int(input())
array = list(map(int, input().split()))
#array=input()
#array=array.split(' ')
#print("length of array is "+str(len(array)))
for i in range(0,N):
    #array.append(int(strarray[i]))
    array[i]=int(array[i])
quickSort(array,0,len(array)-1)
for i in range(0,N):
    print(str(array[i])+" ",end="")

# print("in quickSort....."+str(len(array)))

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容