如何从数组中获得第二高的值,第三高的值等

时间:2014-02-05 18:11:13

标签: java sorting vector

我真的需要一些帮助解决这个问题。我正在尝试用Java代码编写一个函数,但是我被卡住了,我不知道如何继续。我有这个数据包含1行(区域)和7列(医院)。对于该地区,有一个百分比,这个人将最终在医院1,另一个百分比将最终在h2等。数据看起来像这样:

hospital  h1  h2  h3 ...
area   
a1        11  45  3  ...

我已将数据保存在包含7个值的双精度数组中。我有这个随机生成器fcn随机选择我们所在数组中的位置的索引值。如果该随机发生器选择例如index = 0表示11%,如果它随机选择index = 2表示3%等等。

问题是,在我这样做之后,我想检查这家医院是否闲置。如果它是空闲的,那么我想返回随机选择的整数索引值。如果它没有空闲,我想选择第二高百分比的下一家医院,如果该医院处于闲置状态,则返回此int指数值,否则继续并检查第三高百分比并进行另一次检查,依此类推。如果所有医院都没有闲置,则返回随机选择的值。

这是我到目前为止所做的:

double vector[] = new double[distrToEachHosp.length]();

//start by setting the contents to index
for(int index=0; index<vector.length; index++){
        vector[index] = index;
}
for(int i=0; i <= vector.length; i++){
    for(int x=1; x <= vector.length; x++){
        if (distrToEachHosp[vektor[x]] > distrToEachHosp[vektor[x+1]]){ //compare content that corresponds to index
            //move index
            int temp = vector[x];
            vector[x] = vector[x+1];
            vector[x+1] = temp;
        }
    }         
}
return vektor;


int rndValue = randomGenerator(distrToEachHosp);

for(int i=0; i<vector.length; i++){
    if(hospital.get(i).namn == hospitalNameVariable[rndValue] ){  //hospitalNameVariable is a variable containing the names of the hospitals
        if(hospital.get(i).idle()>0){
    return rndValue;                
    } else {
                if(vector[0] >= rndValue) {
        return vector[0];
        } else if(vektor[1] >= slumpVärde) {
            ......
      } 

 }

 }

这就是我被困的地方。我现在用第一种算法对数据进行了一些排序,但从逻辑上讲,我不知道如何包含所有的情况。

2 个答案:

答案 0 :(得分:0)

您可以使用Arrays.sort(vector)进行排序而不是实施。

对于第二个和第三个值,您始终可以通过索引来访问 分别为vector[vector.length-2]vector[vector.length-3]

答案 1 :(得分:0)

每次选择医院时都没有理由对阵列进行排序,这似乎就像你要做的那样。

如果您在程序开头对阵列进行一次排序,则非常简单。将索引设置为随机选择,如果它不是空闲然后递减索引,如果它没有空闲然后递减索引,重复直到找到空闲或用完选项。由于数组始终按排序顺序排列,因此您始终知道,无论您身在何处,下一个最佳选择都是数组中的先前值。 HTH