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

2022-08-11 17:18:11 字數 435 閱讀 6370

1.實踐題目名稱:找第k小的數

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

3.演算法描述:用快速排序的思路,每一趟的用來劃分的數在排列後的位置就是最後結果中的位置,即為陣列中其下標為+1小的數(陣列從0開始),若其陣列下標+1小於k,則第k小的數在其右邊,對右邊使用遞迴演算法,其陣列下標+1大於k,則第k小的數在其左邊,對左邊使用遞迴演算法。

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

時間複雜度:運用了分治法和快速排序法。用陣列中的元素x對陣列進行劃分,分成左右兩個區域,判斷x是否為第k小的數,若是,則輸出,若不是繼續劃分查詢,平均時間複雜度則為o(n)

空間複雜度:find函式運用了遞迴,空間複雜度為o(logn)。

5.心得體會:對一直沒有思路的遞迴演算法有了系統的了解,明白了「三部曲」:分解、遞迴求解、合併。

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

實踐題目名稱 找第k個小的數 問題描述 設計乙個平均時間為o n 的演算法,在n 1 n 1000 個無序的整數中找出第k小的數。演算法描述 就是先假設a left 為這個分界值x,然後排序。比較x是不是第k個如果是,返回這個值。如果不是比較一下x和a k 的大小,如果xa k 遞迴在x的右邊找 演...

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

7 1 最大子列和問題 20分 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資...

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

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