分块排序

  1.  

     

  2. 分块查找规则:

     

     

  3. 分块查找代码实现
    public class 分块查找 {
    public static void main(String[] args) {
    int array[]={16,5,9,12,21,18,
    32,23,37,26,45,44,
    50,48,61,52,73,66};
    //创建3个块的对象

    block block1 = new block(21, 0, 5);
    block block2 = new block(45, 6, 11);
    block block3 = new block(73, 13, 17);
    //定义一个数组来管理索引表
    block[] blockarray ={block1,block2,block3};
    int number=37;
    //索引表
    int index= getIndex(blockarray,array,number);
    System.out.println(index);
    }

    private static int getIndex(block[] blockarray, int[] array, int number) {
    int index = findIndex(blockarray, number);
    if (index==-1){
    return -1;

    }
    //获取起始索引和结束索引
    int startIndex=blockarray[index].getStartIndex();
    int endIndex=blockarray[index].getEndStart();
    for (int i = startIndex; i <=endIndex; i++) {
    if (array[i]==number){
    return i;
    }


    }
    return -1;


    }
    //索引表
    private static int findIndex(block[] block,int number){
    for (int i = 0; i <block.length ; i++) {
    if (number<block[i].getMax()){
    return i;
    }

    }
    return -1;
    }
    }
    class block{
    private int max;//最大值
    private int startIndex;//起始索引

    private int endStart;//结束索引


    public block(int i, int i1, int i2) {
    this.max = i;
    this.startIndex = i1;
    this.endStart = i2;
    }

    public int getMax() {
    return max;
    }

    public void setMax(int max) {
    this.max = max;
    }

    public int getStartIndex() {
    return startIndex;
    }

    public void setStartIndex(int startIndex) {
    this.startIndex = startIndex;
    }

    public int getEndStart() {
    return endStart;
    }

    public void setEndStart(int endStart) {
    this.endStart = endStart;
    }
    }
posted @ 2023-03-27 17:59  为zq  阅读(107)  评论(0)    收藏  举报