Min und Max einer Liste in Python (ohne Verwendung der Min / Max-Funktion)

Ich habe mich gefragt, ob es eine Möglichkeit gibt, Min & Max einer Liste zu finden, ohne Min / Max-Funktionen in Python zu verwenden. Also habe ich einen kleinen Code dafür geschrieben, indem ich die Rekursion benutzt habe. Meine Logik ist sehr naiv: Ich erstelle zwei Stapel (min_stack und max_stack), die bei jedem rekursiven Aufruf das Minimum und das Maximum verfolgen. Ich habe zwei Fragen:

Kann mir jemand helfen, die Komplexität meines Codes einzuschätzen?Gibt es einen besseren Weg, dies zu tun? Wird das Sortieren der Liste mit Mergesort / Quicksort und Aufnehmen des ersten und letzten Elements eine bessere Leistung bringen?

Vielen Dank

Hier ist mein Versuch in Python:

minimum = []
maximum = []

# Defining Stack Class
class Stack:
    def __init__(self) :
        self.items = []

    def push(self, item) :
        self.items.append(item)

    def pop(self) :
        return self.items.pop()

    def access(self, index):
        return self.items[index]

    def isEmpty(self) :
        return (self.items == [])

    def length(self):
        return len(self.items)

def minmax(input_list):
    # make two stacks, one for min and one for max
    min_stack = Stack()
    max_stack = Stack()
    # comparing the first two elements of the list and putting them in appropriate stack
    if input_list[0]<input_list[1]:
        min_stack.push(input_list[0])
        max_stack.push(input_list[1])
    else:
        max_stack.push(input_list[0])
        min_stack.push(input_list[1])

    # Pushing remaining elements of the list into appropriate stacks. 
    for i in range(2, len(input_list)):
        if input_list[i] < min_stack.access(-1):
            min_stack.push(input_list[i])
        else:
            max_stack.push(input_list[i])

    # to find minimum
    minlist = []
    while min_stack.length() > 0:
        minlist.append(min_stack.pop())

    # to find maximum
    maxlist = []
    while max_stack.length() > 0:
        maxlist.append(max_stack.pop())

    if len(minlist) > 1:
        minmax(minlist)
    else:
        minimum.append(minlist)


    if len(maxlist) > 1:
        minmax(maxlist)
    else:
        maximum.append(maxlist)

def main():
    input_list = [2, 0, 2, 7, 5, -1, -2]
    print 'Input List is: ', input_list
    minmax(input_list)

print 'Global Minimum is: ', minimum[0]
print 'Global Maximum is: ', maximum[len(maximum)-1]

if __name__ == "__main__":
    main()

Antworten auf die Frage(2)

Ihre Antwort auf die Frage