1 A1 10%
2 A2 15%
3 A3 35%
4 A4 6%
5 A5 30%
6 A6 4%假设这是张表或是一个集合,数字代表序号,A代表ID 百分数代表每一行记录出现在页面例表第一位的机率(总合为100%)现在要求把些记录查寻出来显示在页上,按所给的百分比把相应记录显示在第一位。(50%代表有50%的机会出现在第一的位置)求一算法,能用JAVA实现最好

解决方案 »

  1.   

    实现comparable接口存入红黑树里面就可以了
      

  2.   

    一个变相的算法:
    随机出一个0~99的整数,由百分比确定一个区间(百分比越大占有的区间越大,如下所示),整数出现在哪个区间就把这一行作为第一行,例如随机数为55时把A3放到第一行。
    1 A1 10%  [0-10)       
    2 A2 15%  [10-25)      
    3 A3 35%  [25-60)      
    4 A4 6%   [60-66)      
    5 A5 30%  [66-96)      
    6 A6 4%   [96-100)     执行1万次的一个结果:
    (指定的概率/设为第一行的次数)
    10 1008
    15 1567
    35 3483
    6 613
    30 2935
    4 394测试代码:import java.util.Random;public class RandomTest {  private static Random RANDOM = new Random();  public static void main(String[] args) {
        int[][] array = new int[][] { { 10, 0 }, { 15, 0 }, { 35, 0 }, { 6, 0 },
            { 30, 0 }, { 4, 0 } };
        for (int i = 0; i < 10000; i++) {// 测试10000次
          setFirst(array);
        }
        for (int i = 0; i < array.length; i++) {//指定的概率-实际次数
          System.out.println(array[i][0] + " " + array[i][1]);
        }
      }  private static void setFirst(int[][] array) {
        int begin = 0;
        int r = RANDOM.nextInt(100);
        for (int i = 0; i < array.length; i++) {
          if (r >= begin && r < begin + array[i][0]) {//判断区间
            array[i][1] = array[i][1] + 1;//设为第一行,次数加1
            break;
          } else {
            begin += array[i][0];
          }
        }
      }}
      

  3.   

    我有个不成熟的想法 看看是否可行 
    1 A1 10% 
    2 A2 15% 
    3 A3 35% 
    4 A4 6% 
    5 A5 30% 
    6 A6 4%
    楼主取出的百分比在表里应该是一个字段吧?如果是的话 取出值后用字符串截取 从第一位取到百分号的位置。然后提取出来 转换成整型然后 比较 排序 不知道可以不 嘿嘿~
    拆分字符串示例  :
    String str="35%";
    String[] test=str.split("%");
    int i=Integer.parseInt(test[0]);
    out.println(i);