python第二章上機實踐 第二章上機實踐報告

2021-10-11 11:53:41 字數 1442 閱讀 8203

設計乙個平均時間為o(n)的演算法,在n(1<=n<=1000)個無序的整數中找出第k小的數。

輸入格式:

輸入有兩行:

第一行是n和k,0

第二行是n個整數

輸出格式:

輸出第k小的數

輸入樣例:

在這裡給出一組輸入。例如:

10 4

2 8 9 0 1 3 6 7 8 2

輸出樣例:

在這裡給出相應的輸出。例如:

**:#include

using namespace std;

int partition(int a,int left,int right){

int i = left+1,j = right;

int x = a[left];

while(i<=j){

while(a[i] <= x && i < right) i++;

while(a[j] > x) j--;

if(i >= j) break;

int m;

m = a[j];

a[j] = a[i];

a[i] = m;

a[left] = a[j];

a[j] = x;

return j;

int find(int a, int left, int right, int k)

if (left == right)

return a[left];

int i = partition(a, left, right);

int j = i - left + 1;

if (k <= j)

return find(a, left, i-1, k);

else

return find(a, i + 1, right, k - j);

int main(){

int n,k;

cin>>n>>k;

int arr[10000];

for(int i=0;i

cin>>arr[i];

int q = find(arr,0,n,k);

cout<

return 0;

演算法時間及空間複雜度分析:

最壞情況下的時間複雜度為o(n^2);

每次遞迴將問題分為兩個子問題,每個子問題中又有時間複雜度為o(n)的操作;

最好情況下,每次取得的基準為中值,即劃分產生兩個大小為n/2的區域,有t(n)=2t(n/2)+o(n);

得到時間複雜度為o(nlogn);

最好情況下空間複雜度為o(logn),遞迴呼叫最壞情況下呼叫n次,空間複雜度為o(n);

心得體會:

這次隊伍上機實驗,find函式其實並不複雜,只是在partition的基礎上進行修改而已,但partition函式裡的小細節,即大於小於符號,判斷數字是否超出界限等需要注意。

python第二章上機實踐 演算法第二章上機實踐報告

1.實踐題目名稱 找第k小的數 2.問題描述 在n 1 n 1000 個無序的整數中找出第k小的數,且時間複雜度為o n 3.演算法描述 int partition int a,int left,int right 函式功能 將輸入的陣列進行排序,排序後的陣列需要滿足 基準左邊的數都小於基準,基準右...

第二章上機實踐報告

題目 2 1 找第k小的數 25分 設計乙個平均時間為o n 的演算法,在n 1 n 1000 個無序的整數中找出第k小的數。輸入有兩行 第一行是n和k,0第二行是n個整數 輸出第k小的數 在這裡給出一組輸入。例如 10 4 2 8 9 0 1 3 6 7 8 2 在這裡給出相應的輸出。例如 2 i...

第二章上機實踐報告

1.實踐題目名稱 最大子列和問題 2.問題描述 7 1 最大子列和問題 20分 給定k個整數組成的序列,連續子列 被定義為,其中 1。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算...