問題
給定乙個長度為n的整數數列,以及乙個整數k。
請用快速選擇演算法求出數列的第k小的數是多少。
輸入格式
第一行包含兩個整數 n 和 k。
第二行包含 n 個整數(所有整數均在1~1000000範圍內),表示整數數列。
輸出格式
輸出乙個整數,表示數列的第k小數。
資料範圍
1 <= n <= 1000000,
1 <= k <= n
輸入樣例
635
4213
6
輸出樣例
3
完整**實現
//快速選擇演算法_c++_day_2_2.18_o(n)
// example: 第k個數
#include
using
namespace std;
const
int n =
1000000
;int n, k;
int q[n]
;int
quick_sort
(int l,
int r,
int k)
int s1 = j - l +1;
if(k <= s1)
return
quick_sort
(l, j, k)
;// 在前面一段查詢
return
quick_sort
(j +
1, r, k - s1)
;// 在後面一段查詢
}int
main()
Day2 選擇排序
參考本文對選擇排序的一些提示,在星球內記錄 及思考過程。選擇排序是一種簡單直觀的排序演算法,無論什麼資料進去都是 o n 的時間複雜度。所以用到它的時候,資料規模越小越好。唯一的好處可能就是不占用額外的記憶體空間了吧。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置 再從剩餘未排序元素...
Day2 選擇排序
day 2 演算法題 寫出選擇排序 又找到乙個更小的值2,重新標記它為紅色 一輪比較後,找到最小值2並標記為黃色,表示就位,繼續在未排序序列中尋找最小值 錯誤出在這裡,換位置是都要帶著元素再列表中的索引的,這裡相當於用min的值替換了j位置的值 return our list 並沒有實現交換位置 l...
Day2 分治法 快速排序
十大經典演算法總結 一 思想 分治,遞迴 序位,前後位置 下標 元素的值 關鍵字,數字的大小 快速排序,效率很高。圖示說明 和具體操作一起看,那裡的一些結論直接畫在圖上了 二 具體操作 一 思路 basic,分割後的陣列左右邊界lr 下標 動的標記i,j 下標 二 思考 建立分割的這個函式,這個需要...