classSolution1: defgetLeastNumbers(self, arr: List[int], k: int) -> List[int]: lstStd = arr lstStd.sort() res = lstStd[:k] return res ### solution2: ### wirte your own quick sort ### This was taken from https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/solution/jian-zhi-offer-40-zui-xiao-de-k-ge-shu-j-9yze/ classSolution2: defgetLeastNumbers(self, arr: List[int], k: int) -> List[int]: defquick_sort(arr, l, r): if l >= r: return i, j = l, r while i < j: while i < j and arr[j] >= arr[l]: j -= 1 while i < j and arr[i] <= arr[l]: i += 1 arr[i], arr[j] = arr[j], arr[i] arr[l], arr[i] = arr[i], arr[l] quick_sort(arr, l, i - 1) quick_sort(arr, i + 1, r) quick_sort(arr, 0, len(arr) - 1) return arr[:k] classSolution3: defgetLeastNumbers(self, arr: List[int], k: int) -> List[int]: if k >= len(arr): return arr defquick_sort(l, r): i, j = l, r while i < j: while i < j and arr[j] >= arr[l]: j -= 1 while i < j and arr[i] <= arr[l]: i += 1 arr[i], arr[j] = arr[j], arr[i] arr[l], arr[i] = arr[i], arr[l] if k < i: return quick_sort(l, i - 1) if k > i: return quick_sort(i + 1, r) return arr[:k] return quick_sort(0, len(arr) - 1)
📏 测试
我们用如下代码测试:
### import require package import numpy as np import random import matplotlib.pyplot as plt import time import seaborn as sns from typing importList, Dict, Tuple, Sequence defProgramTime(N,func): lst = [random.randrange(10**7) for n inrange(N)] start = time.perf_counter() func(lst,10) runtime = (time.perf_counter() - start) return runtime ProgramTimeVec = np.vectorize(ProgramTime)
### define theory function deff1(n, k): return k*n deff2(n, k): return k*n*np.log(n)
### plot test curve n = np.arange(1, 2000) colors = sns.color_palette("Set1")