標籤:result 方法 random put 時間 bubble name size 產生
1.將n個元素從大到小排序後,選擇第k個大的元素
#!/usr/bin/env python#coding -*- utf:8 -*-#冒泡排序選第k個元素import randomimport timedef select_k(): n = int(input("所要產生的數組的長度:")) arraya = [] for i in range(n): x = random.choice(range(100)) arraya.append(x) print("所產生的數組(未排序):", arraya) arrayb = bubble_sort(arraya) print("排序後的數組:", arrayb) k = int(input("選擇第幾個元素:")) #從大到小第k個元素 result = arrayb[k-1] return resultdef bubble_sort(a): for i in range(len(a)): for j in range(i,len(a)): if a[i]<a[j]: tmp = a[i] a[i] = a[j] a[j] = tmp return aif __name__==‘__main__‘: t0 = time.clock() print("第k個元素是:",select_k()) #第二次調用clock()減去第一次調用clock()即為程式執行的時間 print("程式執行的時間:",time.clock()-t0)
2.泡排序前k個元素,後面的元素逐個和第k個元素比較,如果小於則忽略,如果大於則加入到正確的位置並移除最後一個元素
#!/usr/bin/env python#coding -*- utf:8 -*-#冒泡排序前k個元素,後面的元素逐個和第k個元素比較,如果小於則忽略,如果大於則#加入到正確的位置並移除最後一個元素import randomimport timedef select_k(): n = int(input("所要產生的數組的長度:")) k = int(input("選擇第幾個元素:")) arraya = [] for i in range(n): x = random.choice(range(100)) arraya.append(x) print("所產生的數組(未排序):", arraya) arrayb = bubble_sort(arraya[:k]) print("前k個元素排序後的數組:", arrayb) for i in range(k, n): if(arrayb[-1]<arraya[i]): arrayb.append(arraya[i]) arrayb = bubble_sort(arrayb) arrayb.pop() #返回第k個大的元素 result = arrayb[-1] return resultdef bubble_sort(a): for i in range(len(a)): for j in range(i,len(a)): if a[i]<a[j]: tmp = a[i] a[i] = a[j] a[j] = tmp return aif __name__==‘__main__‘: t0 = time.clock() print("第k個大的元素是:",select_k()) #第二次調用clock()減去第一次調用clock()即為程式執行的時間 print("程式執行的時間:",time.clock()-t0)
3.時間對比
方法一:
N | 10 | 100 | 1000 | 5000 | 10000 | 20000 |
T | 0.0 | 0.001 | 0.06 | 1.17 | 4.65 | 18.25 |
方法二:
N | 10 | 100 | 1000 | 5000 | 10000 | 20000 |
T | 0.0 | 0.0 | 0.0 | 0.02 | 0.02 | 0.03 |
演算法:冒泡排序(python版)