将quicksort函数转换为类?

时间:2018-11-28 00:51:38

标签: python arrays class quicksort

对于我的家庭作业,我需要将此快速排序代码转换为一个类。 (我还有其他排序算法可以进行转换,heapsort,mergesort,bubblesort等,但是帮助这个示例将对其他示例有所帮助)

在该类中,我需要计算执行的数组操作和递归调用的数量(我假设这将是init内的一个计数器)

执行算法时,我还需要计算分配的额外数组空间的数量。

我并没有要求完全完成上述规格的课程,我只是想找人帮助我完成课程,以符合规格,我可以弄清楚何时何地添加到arrayoperations / extra数组空间计数器。

from random import * 

def partition(array,first,last) :
    print("first:",first,"last:",last)
    big = first + 1
    small = last
    pivot = array[first]
    while (big <= small) :
        while (big <= last and array[big] <= pivot) :
            big += 1
        while array[small] > pivot :
            small -= 1
        if big < small :
            array[small], array[big] = array[big], array[small]
    array[first], array[small] = array[small], array[first]
    return small

def quickSort(array,first,last) :
    if first >= last :
        return
    pivLoc = partition(array,first,last)

    quickSort(array, first, pivLoc-1)
    quickSort(array, pivLoc+1, last)
    return

1 个答案:

答案 0 :(得分:0)

通过将任意一组函数封装起来,它们可以成为类方法,如下所示:

class ClassName:
     def __init__(self):
         pass
     ... # Functions go here

这当然不是超级有用,但是这就是代码的外观。

class QuickSorter:
    def __init__(self):
        pass
    def partition(array,first,last) :
        print("first:",first,"last:",last)
        big = first + 1
        small = last
        pivot = array[first]
        while (big <= small) :
            while (big <= last and array[big] <= pivot) :
                big += 1
            while array[small] > pivot :
                small -= 1
            if big < small :
                array[small], array[big] = array[big], array[small]
        array[first], array[small] = array[small], array[first]
        return small

    def quickSort(array,first,last) :
        if first >= last :
            return
        pivLoc = partition(array,first,last)

        quickSort(array, first, pivLoc-1)
        quickSort(array, pivLoc+1, last)
        return

但是您通常需要一些数据成员,以便您的方法可以共享数据。 (这是您跟踪教授要求的指标的方式。)

class Stack:
    def __init__(self, array):
        self.array = []
    def push(self, new):
        self.array = self.array + [new]
    ...