劍指offer——輸出陣列中k個最小值(快速,冒泡,選擇,插入)
阿新 • • 發佈:2018-11-12
找k個最小值,基本思路是對陣列排序,輸出前k個或者後k個,我們回顧一下之前的學習過的集中排序方法:
- 快速排序
class Solution(): def GetLeastNumbers_Solution(self, tinput,k): def quick_sort(lis) if not lis: return [] q=lis[0] left=quick_sort([x for x in lis[i:] if x<q]) right=quick_sort([x for x in lis[1:]if x>q]) return left+[q]+right if k > len(tinput): return [] tinput = quick_sort(tinput) return tinput[: k]
- 氣泡排序
class Solution(): def GetLeastNumbers_Solution(self,tinput,k): def bubble_sort(lis): if not lis: return [] for i in range(len(lis)): for j in range(len(lis)-i): if lis[j-1]>lis[j]: lis[j-1],lis[j]=lis[j],lis[j-1] return lis if k>len(tinput): return [] tinput=bubble_sort(tinput) return tinput[:k]
- 選擇排序
class Solution(): def GetLeastNumbers_Solution(self,tinput,k): def select_sort(lis): if lis=[]: return [] for i in range(len(lis)-1): smalllist=i for j in range(i,len(lis)): if lis[j]<lis[smallest]: smallest=j lis[j],lis[smallest]=lis[smallest],lis[j] return lis if k>len(tinput): return [] tinput=select_sort(tinput) return tinput[:k]
- 插入排序
class Solution():
def GetLeastNumbers_Solution(self,tinput,k):
def insert_sort(lis):
if lis=[]:
return []
for i in range(1,len(lis)):
for j in range(i,0,-1):
if lis[j]<lis[j-1]:
lis[j-1],lis[j]=lis[j],lis[j-1]
return lis
if k>len(tinput):
return []
tinput=insert_sort(tinput)
return tinput[:k]