码迷,mamicode.com
首页 > 其他好文 > 详细

【算法导论学习-015】数组中选择第i小元素(Selection in expected linear time)

时间:2014-08-17 21:26:12      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:算法导论   数组中选择第k小元素   线性时间选择   

1、算法思想
问题描述:从数组array中找出第i小的元素(要求array中没有重复元素的情况),这是个经典的“线性时间选择(Selection in expected linear time)”问题。
思路:算法导论215页9.2 Selection in expect linear time
2、java实现
思路:算法导论216页伪代码

/*期望为线性时间的选择算法,输入要求,array中没有重复的元素*/
    public static int randomizedSelect(int[] array,int start,int end,int i) {
        if (start==end) {
            return array[start];
        }
        int middle=randomizedPartition(array, start, end);
        int k=middle-start+1;
        if (i==k) {
            return array[middle];
        }else if (i<k) {
            return randomizedSelect(array, start, middle-1, i);
        }else {
            return randomizedSelect(array, middle+1, end, i-k);
        }
    }
randomizedPartition(array,start,end)参见:【算法导论-010】快速排序(quickSort)

3、非递归版本

	/*非递归版本的线性时间选择*/
	public static int iterativeRandomizedSelect(int[] array,int start,int end,int i) {
		int result=0;
		while (start<=end) {
			if (start==end) {
				return array[start];
			}
			int middle=randomizedPartition(array, start, end);
			int k=middle-start+1;
			if (i==k) {
				result= array[i];
			} else if (i<k) {
				end=middle-1;
			}else {
				start=middle+1;
				i=i-k;
			}
			
		}
		return result;
	}



【算法导论学习-015】数组中选择第i小元素(Selection in expected linear time),布布扣,bubuko.com

【算法导论学习-015】数组中选择第i小元素(Selection in expected linear time)

标签:算法导论   数组中选择第k小元素   线性时间选择   

原文地址:http://blog.csdn.net/brillianteagle/article/details/38641811

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!