線性查找法(BFPRT)

BFPRT算法解決的問題十分經(jīng)典,即從某n個元素的序列中選出第k大(第k蟹悦铩)的元素,通過巧妙的分 析隧期,BFPRT可以保證在最壞情況下仍為線性時間復(fù)雜度。
該算法的思想與快速排序思想相似宏蛉,當(dāng)然性置,為使得算法在最壞情況下,依然能達(dá)到o(n)的時間復(fù)雜 度嗅义,五位算法作者做了精妙的處理

  算法步驟:

              1. 將n個元素每5個一組篡石,分成n/5(上界)組凰萨。

              2. 取出每一組的中位數(shù),任意排序方法武通,比如插入排序珊搀。

              3. 遞歸的調(diào)用selection算法查找上一步中所有中位數(shù)的中位數(shù),設(shè)為x囚枪,偶數(shù)個中位數(shù)的情況下設(shè)定為選取中間小的一個链沼。

              4. 用x來分割數(shù)組沛鸵,設(shè)小于等于x的個數(shù)為k,大于x的個數(shù)即為n-k疾捍。

              5. 若i==k栏妖,返回x;若i<k咙鞍,在小于x的元素中遞歸查找第i小的元素趾徽;若i>k,在大于x的元素中遞歸查找第i-k小的元素疲酌。

終止條件:n=1時了袁,返回的即是i小元素。

圖解

Paste_Image.png

線性查找就是從數(shù)組的起始位置a[0]開始依次比較數(shù)組中的每一個值直到找到目標(biāo)值粥诫,當(dāng)然也有可能循環(huán)遍歷了數(shù)組中所有值也沒找到目標(biāo)值怀浆。

代碼

  public class LinearSearchDemo { 
                public static void main(String[] args) { 
                        int[] data = {2, 1, 4, 6, 12, 7}; 
                        int target = 12; 
                        int searchIndex = search(data, target); 
                        if (searchIndex != -1) { 
                              System.out.println("found at: " + searchIndex); 
                        }else { 
                              System.out.println("not found"); 
                        } 
                } 
          /*
           *@param data 待查找的數(shù)組 
           *@param target 待查找的值 
           *@return int 目標(biāo)值在數(shù)組中的索引执赡,如果沒找到返回-1  
           */
         public static int search(int[] data, int target) { 
                        int length = data.length; 
              //從頭遍歷數(shù)組中的各個值函筋,如果找到目標(biāo)值就返回其索引 
                      for (int i = 0; i < length; i++) { 
                                if (data[i] == target) { 
                                          return i; 
                                } 
                      }
            //代碼能走到這一步就說明上面的循環(huán)遍歷結(jié)束了也沒找到目標(biāo)值 //即目標(biāo)值不存在于數(shù)組中
                       return -1; 
          }
      }
    輸出結(jié)果:found at: 4
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末首懈,一起剝皮案震驚了整個濱河市谨敛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌佣盒,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盯仪,死亡現(xiàn)場離奇詭異全景,居然都是意外死亡牵囤,警方通過查閱死者的電腦和手機滞伟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門梆奈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來称开,“玉大人,你說我怎么就攤上這事清酥≡搪拢” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵辱志,是天一觀的道長荸频。 經(jīng)常有香客問我客冈,道長,這世上最難降的妖魔是什么和悦? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任渠缕,我火速辦了婚禮,結(jié)果婚禮上馍忽,老公的妹妹穿的比我還像新娘遭笋。我一直安慰自己徒探,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布央串。 她就那樣靜靜地躺著,像睡著了一般质和。 火紅的嫁衣襯著肌膚如雪侦另。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機與錄音袄友,去河邊找鬼。 笑死支竹,一個胖子當(dāng)著我的面吹牛鸠按,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播目尖,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼饮戳,長吁一口氣:“原來是場噩夢啊……” “哼洞拨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起烦衣,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秸歧,沒想到半個月后示辈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡纱耻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年弄喘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片累奈。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡澎媒,死狀恐怖波桩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情镐躲,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站裆熙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏齐媒。R本人自食惡果不足惜纷跛,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一贫奠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拷恨,春花似錦谢肾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兢交。三九已至笼痹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晴裹,已是汗流浹背纺座。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喳瓣。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓畏陕,卻偏偏與公主長得像惠毁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鞠绰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容