快速排序 day 2

2021-10-02 22:37:06 字數 975 閱讀 6916

問題

給定乙個長度為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 下標 二 思考 建立分割的這個函式,這個需要...