ソート&クイックソートの例の選択


1、ソートの簡単な例を選択(python実装)
def findSmallest(arr):
    smallest = arr[0]
    smallest_index = 0
    for i in range(1,len(arr)):
        if arr[i] < smallest:
            smallest = arr[i]
            smallest_index = i
    return smallest_index    
#sort the array
def selectSort(arr):
    newArr = []
    for i in range(1,len(arr)):
        smallest_index = findSmallest(arr)
        newArr.append(arr.pop(smallest_index))#                newArr
    return newArr                      
arr = [1,6,8,3,2,5,10]
print(selectSort(arr))

注意:ソートを選択するには、元のシーケンス要素を何度もチェックする必要があります.チェック回数はn,n-1,...,1の順です.ソート完了時の検車総回数は(1+n)*n/2,アルゴリズム複雑度はO(n^2)である.
2,クイックソートの簡単な例(python実装)
def quicksort(array):
    if len(array) < 2:
        return array
    else:
        pivot = array[0] #pivot    ,        
        less = []
        greater = []
        for i in array[1:]:
            if i <= pivot:
                less += [i]
            else:
                greater += [i]
    return quicksort(less) + [pivot] + quicksort(greater)
arr = [1,9,5,3,7]
print(quicksort(arr))
def quicksort(array):
    if len(array) < 2:
        return array
    else:
        pivot = array[0] #pivot    ,        
        less = [i for i in array[1:] if i <= pivot]
        greater = [i for i in array[1:] if i > pivot]
    return quicksort(less) + [pivot] + quicksort(greater)
arr = [1,9,5,3,7]
print(quicksort(arr))

注意:クイックソートでは、まずランダムに基準値pivotを選択し、この値で数列を2つの部分に分けてから、2つの部分を同じ方法で反復ソートして、区別する必要があります(divide and conquer).