LALA  
          日歷
          <2010年1月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          留言簿(1)

          隨筆分類(31)

          文章分類(4)

          收藏夾(21)

          搜索

          •  

          積分與排名

          • 積分 - 29910
          • 排名 - 1389

          最新隨筆

          最新評(píng)論

          閱讀排行榜

           
          用的是隨機(jī)算法。
          C代碼:
          ?1?#include?<stdio.h>
          ?2?#include?<stdlib.h>
          ?3?int?new_random(int?min,?int?max)
          ?4?{
          ?5?????return?(min?+?(int)(((float)rand()/RAND_MAX)*(max?-?min)));
          ?6?}
          ?7?void?swap(int?*a,?int?*b)
          ?8?{
          ?9?????int?c?=?*a;
          10?????*a?=?*b;
          11?????*b?=?c;
          12?}
          13?
          14?int?partition(int?A[],?int?p,?int?r)
          15?{
          16?????int?i?=?p?-?1,?j;
          17?????for(j?=?p;?j?<?r;?j++)
          18?????{
          19?????????if(A[j]?<=?A[r])
          20?????????{
          21?????????????i++;
          22?????????????swap(&A[i],?&A[j]);
          23?????????}
          24?????}
          25?????swap(&A[i?+?1],?&A[r]);
          26?????return?i?+?1;
          27?}
          28?
          29?int?randomize_partition(int?A[],?int?p,?int?r)
          30?{
          31?????int?i?=?new_random(p,?r);
          32?????swap(&A[i],?&A[r]);
          33?????return?partition(A,?p,?r);
          34?}
          35?
          36?//第一種算法
          37?int?randomized_select(int?data[],?int?p,?int?r,?int?k)
          38?{
          39?????if(k?>?(r?-?p?+?1))?return?0;
          40?????if(p?==?r)?return?data[p];
          41?????int?i?=?randomize_partition(data,?p,?r);
          42?????//int?i?=?partition(data,?p,?r);
          43?
          44?????int?count?=?i?-?p?+?1;
          45?????if(k?<=?count)
          46?????????return?randomized_select(data,?p,?i,?k);
          47?????else
          48?????????return?randomized_select(data,?i?+?1,?r,?k?-?count);
          49?}?

          Java代碼:
          ?1?package?algorithm;
          ?2?
          ?3?import?java.util.ArrayList;
          ?4?import?java.util.Collections;
          ?5?import?java.util.List;
          ?6?import?java.util.Random;
          ?7?
          ?8?public?class?FindKth?{
          ?9?
          10?????public?static?Random?rand?=?new?Random();
          11?
          12?????/**
          13??????*?Find?the?K-th?smallest?number?in?a?list?using?random?algorithm
          14??????*?
          15??????*?@return?the?k-th?smallest?number
          16??????*/
          17?????public?static?int?selectKth(int[]?arr,?int?k)?{
          18?????????int?low?=?0;
          19?????????int?high?=?arr.length?-?1;
          20?????????int?m;
          21?????????k?=?k?-?1;
          22?????????while?(low?<?high)?{
          23?????????????int?r?=?low?+?rand.nextInt(high?-?low?+?1);
          24?????????????swap(arr,?low,?r);
          25?????????????m?=?low;
          26?????????????for?(int?i?=?low?+?1;?i?<=?high;?i++)
          27?????????????????if?(arr[i]?<?arr[low])
          28?????????????????????swap(arr,?++m,?i);
          29?????????????swap(arr,?low,?m);
          30?????????????if?(m?==?k)
          31?????????????????return?arr[k];
          32?????????????else?if?(m?<?k)
          33?????????????????low?=?m?+?1;
          34?????????????else
          35?????????????????high?=?m?-?1;
          36?????????}
          37?
          38?????????return?arr[k];
          39?????}
          40?
          41?????public?static?int?selectKth(Integer[]?arr,?int?k)?{
          42?????????int[]?array?=?new?int[arr.length];
          43?????????for?(int?i?=?0;?i?<?arr.length;?i++)
          44?????????????array[i]?=?arr[i];
          45?????????return?selectKth(array,?k);
          46?????}
          47?
          48?????private?static?void?swap(int[]?arr,?int?low,?int?r)?{
          49?????????int?tmp?=?arr[low];
          50?????????arr[low]?=?arr[r];
          51?????????arr[r]?=?tmp;
          52?????}
          53?
          54?????/**
          55??????*?@param?args
          56??????*/
          57?????public?static?void?main(String[]?args)?{
          58?????????List<Integer>?list?=?new?ArrayList<Integer>();
          59?????????for?(int?i?=?0;?i?<?10;?i++)
          60?????????????list.add(new?Integer(i?+?1));
          61?????????Integer[]?arr?=?new?Integer[list.size()];
          62?????????for?(int?loop?=?0;?loop?<?1000;?loop++)?{
          63?????????????Collections.shuffle(list);
          64?????????????list.toArray(arr);
          65?????????????int?res?=?selectKth(arr,?5);
          66?????????????if?(res?!=?5)
          67?????????????????System.out.println(loop?+?"?"?+?res);
          68?????????}
          69?
          70?????}
          71?
          72?}
          73?

          Python代碼:
          ?1?#!/usr/bin/env?python
          ?2?from?random?import?randint
          ?3?
          ?4?#?finding?the?kth?smallest?number?in?a?list
          ?5?def?select(list,?k):
          ?6?????low?=?0
          ?7?????up?=?len(list)?-?1
          ?8?????k?=?k?-?1
          ?9?????while(low?<?up):
          10?????????rand?=?randint(low,?up)
          11?????????list[low],?list[rand]?=?list[rand],?list[low]?#swap
          12?????????m?=?low
          13?????????tmp?=?list[low]
          14?????????for?i?in?xrange(low?+?1,?up?+?1):
          15?????????????if?list[i]?<?tmp:
          16?????????????????m?+=?1
          17?????????????????list[m],?list[i]?=?list[i],?list[m]?#?swap
          18?????????list[m],?list[low]?=?list[low],?list[m]
          19?????????if?m?==?k:
          20?????????????return?list[k]
          21?????????elif?m?<?k:
          22?????????????low?=?m?+?1
          23?????????elif?m?>?k:
          24?????????????up?=?m?-?1??
          25?????return?list[k]
          26?????
          27?????
          28?x?=?range(1,?11)
          29?from?random?import?shuffle
          30?for?i?in?range(100):
          31?????shuffle(x)
          32?????print?select(x,?5)



          posted on 2010-01-20 14:05 Dest 閱讀(740) 評(píng)論(0)  編輯  收藏 所屬分類: 算法
           
          Copyright © Dest Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 陇川县| 彭山县| 营口市| 临潭县| 扎赉特旗| 莎车县| 枣庄市| 宁安市| 衡南县| 天祝| 博罗县| 吴旗县| 芜湖县| 吴堡县| 平昌县| 革吉县| 留坝县| 昌都县| 温宿县| 金昌市| 贞丰县| 钦州市| 象州县| 洪湖市| 克东县| 扎鲁特旗| 霸州市| 靖边县| 镇平县| 张家口市| 西畴县| 乐清市| 乐都县| 炎陵县| 漠河县| 安化县| 鹤峰县| 稻城县| 麦盖提县| 施甸县| 浪卡子县|