一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python找出最小的K個數實例代碼

Python找出最小的K個數實例代碼

2020-12-31 00:30明柳夢少 Python

這篇文章主要介紹了Python找出最小的K個數實例代碼,簡單分析了實現思路,冒泡法和partition思想,具有一定借鑒價值,需要的朋友可以參考下

題目描述

輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。

這個題目完成的思路有很多,很多排序算法都可以完成既定操作,關鍵是復雜度性的考慮。以下幾種思路當是筆者拋磚引玉,如果讀者有興趣可以自己再使用其他方法一一嘗試。

思路1:利用冒泡法

臨近的數字兩兩進行比較,按照從小到大的順序進行交換,如果前面的值比后面的大,則交換順序。這樣一趟過去后,最小的數字被交換到了第一位;然后是次小的交換到了第二位,。。。,依次直到第k個數,停止交換。返回lists的前k個數(lists[0:k],前閉后開)

思路2:使用快排中的partition思想。

①我們設定partition函數的哨兵為key=lists[left],在partition函數中完成一輪比較的結果是,比key大的數都在其右邊,比key小的數放在其左邊。完成該輪后返回其left=right時left的值。

②我們判斷left的值是比k大還是?。?/p>

如果left的值比k大,說明上輪partition之后,lists中前left個小的數在左邊,其余的數在其右邊,我們還需要把尋找范圍縮小,下次找的時候只在數組前面left個數中找了。

如果left的值比k小,說明上輪partition之后,前left個數找的太少了,我們需要再往數組的后面找。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# -*- coding: utf-8 -*-
"""
Date: Tue Sep 19 10:50:11 2017
 
Created by @author: xiaoguibao
 
 
Content: 找最小的k個數
 
"""
def function1(lists,k):
#  冒泡法
  length = len(lists)
  for i in range(k):
    for j in range(i+1,length):
      if lists[i] > lists[j]:
        lists[j],lists[i] = lists[i],lists[j]
  return lists[0:k]
 
"""
思路2 包括2個部分function2_partion和function2
"""
 
def function2_partion(lists,left,right):
  #劃分函數處理部分
  key = lists[left]
  while left < right:
    while left < right and lists[right] >= key:
      right -= 1
    lists[left] = lists[right]
    while left < right and lists[left] <= key:
      left += 1
    lists[right] = lists[left]
  lists[right] = key
  return left
def function2(lists,k):
  #劃分法主要函數部分
  length = len(lists)
  left = 0
  right = length - 1
  index = function2_partion(lists,left,right)
  while k!=index:
    if index > k-1:
      right = index-1
    else:
      left = index+1
    index = function2_partion(lists,left,right) 
  return lists[0:k]
 
def main():
  lists = [1,1,6,4,11,9,2,10,3]
#  print "思路一(冒泡法):",function1(lists,8)
  print "思路二(劃分法):",function2(lists,8)
if __name__=="__main__":
  main()

總結

以上就是本文關于Python找出最小的K個數實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/u010636181/article/details/78417977

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人免费视频播放 | 成人福利网站含羞草 | 久久精品在现线观看免费15 | 亚洲 无码 制服 日韩 | 男男羞羞视频网站国产 | 99久久精品99999久久 | 四虎影院网站 | 欧美free激情野战hd | 4hc44四虎永久地址链接 | 痴mu动漫成年动漫在线观看 | 我把校花黑色蕾丝胸罩脱了 | 亚洲 欧美 成人 | 国产成人手机在线 | x8x8国产在线观看2021 | 香蕉久久夜色精品国产小优 | 精品久久久久久久久久久久久久久 | 午夜精品在线视频 | 婷婷日韩| 日本xxxxx69hd日本 | 免费人成网址在线观看国内 | 国产欧美另类 | 日本xxxxxxxxx高清hd | 精选国产AV精选一区二区三区 | 青青青国产视频 | 欧美成人精品福利网站 | 国产成人精品视频一区二区不卡 | 日韩欧一级毛片在线播无遮挡 | 日本哺乳期网站xxxx | 日本一区二区三区久久 | 国产nv精品你懂得 | 狠狠婷婷综合缴情亚洲 | 麻豆性视频 | 成人性生交大片免费看软件 | 视频大全在线观看网址 | 亚洲国产一区二区a毛片 | 日本高清在线播放 | 四虎在线视频免费观看视频 | 日本黄色大片网站 | 男同精品视频免费观看网站 | 国产精品免费看香蕉 | 亚洲激情视频在线 |