<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    導航

    留言簿(1)

    隨筆分類(31)

    文章分類(4)

    收藏夾(21)

    搜索

    •  

    積分與排名

    • 積分 - 29818
    • 排名 - 1390

    最新隨筆

    最新評論

    閱讀排行榜

     
    用的是隨機算法。
    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 閱讀(737) 評論(0)  編輯  收藏 所屬分類: 算法
     
    Copyright © Dest Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 久久精品视频免费播放| 免费播放特黄特色毛片| 久久WWW免费人成一看片| 永久免费看bbb| 亚洲日本va中文字幕久久| 亚洲视频无码高清在线| 国产一级片免费看| 凹凸精品视频分类国产品免费| 亚洲国产日韩一区高清在线| 国产成人va亚洲电影| 国产精品成人免费福利| 4338×亚洲全国最大色成网站| 亚洲av成人一区二区三区| 精品视频在线免费观看| 亚洲国产精品lv| 精品福利一区二区三区免费视频 | 色视频色露露永久免费观看| 亚洲第一se情网站| xxxx日本免费| 亚洲国产成人久久一区二区三区 | 韩国日本好看电影免费看| 亚洲AV成人无码久久WWW| 黄页网站免费观看| 久久精品蜜芽亚洲国产AV| 国产成人免费ā片在线观看老同学 | 国产亚洲视频在线播放大全| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲国产美女视频| 久久精品国产这里是免费| 亚洲国产成a人v在线| 成人福利免费视频| 国产亚洲欧美在线观看| 国产精品亚洲产品一区二区三区| 日韩精品无码免费一区二区三区| 亚洲日本一区二区三区在线| 久久午夜夜伦鲁鲁片免费无码影视| 亚洲电影一区二区三区| 三年片在线观看免费观看大全动漫| 国产性爱在线观看亚洲黄色一级片| eeuss影院免费直达入口| 中文字幕中韩乱码亚洲大片|