Python程式:在預期線性時間內從列表中選擇第n大元素
當需要線上性時間複雜度內從列表中選擇第n大元素時,需要兩種方法。一種方法是找到最大元素,另一種方法是將列表分成兩部分。這種劃分取決於使用者提供的'i'值。根據此值,列表被分割,並確定最大元素。
以下是相同的演示 -
示例
def select_largest(my_list, beg, end, i):
if end - beg <= 1:
return my_list[beg]
pivot_val = start_partition(my_list, beg, end)
k = end - pivot_val
if i < k:
return select_largest(my_list, pivot_val + 1, end, i)
elif i > k:
return select_largest(my_list, beg, pivot_val, i - k)
return my_list[pivot_val]
def start_partition(my_list, beg, end):
pivot_val = my_list[beg]
i = beg + 1
j = end - 1
while True:
while (i <= j and my_list[i] <= pivot_val):
i = i + 1
while (i <= j and my_list[j] >= pivot_val):
j = j - 1
if i <= j:
my_list[i], my_list[j] = my_list[j], my_list[i]
else:
my_list[beg], my_list[j] = my_list[j], my_list[beg]
return j
my_list = input('Enter the list of numbers.. ')
my_list = my_list.split()
my_list = [int(x) for x in my_list]
i = int(input('Enter the value for i.. '))
ith_largest = select_largest(my_list, 0, len(my_list), i)
print('The result is {}.'.format(ith_largest))輸出
Enter the list of numbers.. 34 67 12 0 999 Enter the value for i.. 1 The result is 999.
解釋
定義了一個名為“select_largest”的方法,該方法將列表、起始位置、結束位置和'i'值作為引數。
定義了另一個名為“start_partition”的方法,該方法根據'i'值將列表分成兩部分。
此方法在“select_largest”方法中被呼叫。
“select_largest”也在同一個函式內部再次被呼叫——這就是遞迴的工作方式。
數字從使用者處作為輸入獲取。
它基於預設值進行分割。
它被迭代。
從使用者處獲取'i'的值。
基於此'i'值,列表被分成兩部分。
“select_largest”方法被呼叫在一個列表上。
輸出顯示在控制檯上。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP