当前位置: 首页 > 工具软件 > Quick[select] > 使用案例 >

java quickselect_QuickSelect

王棋
2023-12-01

QuickSelect : 快速选择,在线性时间内查找第k个位置的元素。

算法目的: 数组长度为n,查找第k个元素

复杂度:o(N)

算法:

1,从数组中随机选定一个元素x,大于x的分成一组,记做smaller,小于x的分成一组,记做larger

2,如果 smaller的长度等于k-1,说明x是第k个位置的元素

3,如果 smaller的长度大于等于k,从smaller中找到第k个元素

4,如果smaller的长度 + 1 小于k,从larger中找第k-1 - smaller长度位置的元素

算法的最大比较次数不超过4n

Java 代码:

package alg.analysis;

import java.util.ArrayList;

import java.util.List;

public class QuickSelect {

public static int quickSelect(List datas, int k){

assert (k>=1&&k<=datas.size());

List smallers = new ArrayList();

List largers = new ArrayList();

int valueMark = datas.get(0);

for (int i=1;i

if(datas.get(i)>valueMark){

largers.add(datas.get(i));

}

if(datas.get(i)<=valueMark){

smallers.add(datas.get(i));

}

}

if (smallers.size() >= k) {

return quickSelect(smallers, k);

}

if (smallers.size() +1 < k) {

return quickSelect(largers, k-smallers.size()-1);

}

return valueMark;

}

public static void main(String []args){

List datas = new ArrayList();

datas.add(3);

datas.add(2);

datas.add(1);

datas.add(7);

datas.add(6);

datas.add(5);

datas.add(4);

int fifth = quickSelect(datas, 5);

System.out.println(fifth);

}

}

 类似资料:

相关阅读

相关文章

相关问答