python快速排序的代码

import sys
sys.setrecursionlimit(10000)
#low=0
#high=4这样的写法太low
"""
函数名称:partition
功能:确定一个基准值,使基准值左边是小于它的数,右边是大于等于它的数
返回值:基准值的位置
"""
#a[5]=[1,2,23,1,0]#数组?元组怎么用?列表用[],元组用(),这可不是C语言哦
def partition(a,low,high):#需要把low,high的值作为形参传递进去吗
    #for i in range(high):#i是从1到5都取得到吗?还是0到5,还是0到4,需要i吗?是0到4都会取到,i和排序次数有什么联系吗?
        #i in range(5):#这句有必要吗?这句话的语法是这样的吗?下面的语句会缩进吗,这是一句错误的写法,缺了for
        # 还是用if(low<high)?
    pivot = a[low]
    while(low<high):
   # if (low < high):这里会出错
        # pivot = a[low]  这里之前就出过错误,在第一躺里面,pivot是不会变的。 python里面表示数组长度的语句是?
        # while(low<high&&pivot<a[high])#这里需要=吗?不需要也是说的过去的,就是说a[high]=pivot时,把a[high]放在前面
        # 但是如果下面的while里面也没有=,就会出现死循环,让a[low]=a[high]
        while (low < high) and (pivot <= a[high]):  # 不是用&&表示并
            # while (low<high & & a[low] < a[high]):  是要用pivot来比较的
            #  这里 5是数组的长度,数组的长度可以用high表示,不一定非要len,low是0,high是4
            # 第一位与最后一位进行比较,若a[1]>a[0],那么i++,是用a[i]和a[i+1]进行比较还是用j与pivot比较呢?
            # 如果第二位比第一位大,i++
            high = high - 1  # 而不是high--
            # 如果第二位比第一位小,要把第二位移到第一位之前,是吗?yes
        # j从最后一位向前移动,有low和high
        # 如何把比pivot小的数放在其前面?
        a[low] = a[high]
        # 接下来与旁边的数进行比较,如何比较,没有一定要马上用第二个数和第一个比较,可以用第一个和第一个比,然后++的方式
        # 跳到第二个
        while (low < high) and (a[low] <= pivot):
            low = low + 1  # 并没有让第二个数与pivot比较,while和if的差别在哪?在于如果用了while之后,low++之后还可以让
            # a[low]与pivot比较
            # 如何把它放在pivot的左边呢?还有a[low]=pivot的情况,如果a[low]>pivot,把a[low]赋值给a[high]
        a[high] = a[low]  # 这样第一躺没有实现以pivot为分界,只比较了两个数,不会,因为if(len<high),所以会继续比较
    a[low]=pivot
    #pivot = a[low]#应该是把pivot的值赋给a[low]
    return low

        #忘了还要返回新的值进行下一轮的排序,误以为for i in range(high):可以将序列排完
#print(partition(0,4))
"""
函数名称:Quick_sort
function:递归使用partition,完成快速排序
return:排好的列表
"""
def Quick_sort(a,low,high):#形参需要加上数组a吗?
    #需要几个pivoter呢?
    if(low<high):#若low=high就没意义了
        pivoter=partition(a,low,high)
    #如何实现for(i=0;i<high;i++)的功能?
    #到底是使用Quick_sort()还是partition()?看返回值,partition只能返回一个low,所以开始递归
        Quick_sort(a,low,pivoter-1)
        Quick_sort(a,pivoter+1,high)#这里是pivoter+1还是pivoter?
        # 为什么使用Quick_sort(a,pivoter,high)会出现stack overflow
    #当if的情况不成立时,会return 吗?
    else:
        return#返回的是什么
#没有主函数的话,执行的优先顺序是?
a=[1,2,23,1,0]#一般放在后面
Quick_sort(a,0,len(a)-1)
print(a)#如果不加a进去,函数会不会无法调用它
#为什么结果是none?最后要打印出来的是a

最后的打印结果
G:\python\python.exe G:/python/hu/quick_sort.py
[0, 1, 1, 2, 23]

猜你喜欢

转载自blog.csdn.net/qq_41556273/article/details/83176810
今日推荐