找到第K个最小元素

时间:2012-11-01 21:09:40

标签: algorithm

谁能解释我做错了什么?我想找到第k个最小的元素,但出了点问题)

示例:我有未排序的数组 int [] uA = { 2,9,4,13,11,7,8 }; 我采取" 9"作为一个枢轴元素,在第一次迭代(快速排序)之后,我将拥有这个数组{2,8,4,7,11,13,9}。中间指针将显示在" 11"。这到底意味着什么?并非所有元素都优于11大于11而且11不在"正确的位置"一点都不但是,例如,我想要返回第5个最小元素(11)。

2 个答案:

答案 0 :(得分:1)

枢轴不在正确的位置,您应该将枢轴放在分区末端的正确位置,以找出枢轴的位置。 (您真的不需要关心中间元素)然后您可以使用此信息来计算第K个最小元素。假设在分区结束时枢轴位于第x个索引处;

K = x =>  pivot is the right answer
K < x =>  the answer is in the left partition, search left partition  
K > x =>  the answer is in the right partition, search right partition 

答案 1 :(得分:0)

我在代码中发现了一个错误:在分区部分中交换两个元素之后,我移动了指针(左边的++,右边 - ),就像快速排序一样,但是应该没有。

谢谢你们为你们所做的事情!