数据结构----------顺序查找,折半查找和分块查找(java实现)

java 复制代码
import java.util.Arrays;

//顺序查找法
public class Main {
    public static void main(String[] args) {
        //查找表
        int[] arr = {4, 3, 5, 1, 2};
        System.out.print("5在数组中的索引:");
        System.out.println(SearchSeq(arr, 5));

        Arrays.sort(arr);
        System.out.print("2在数组中的索引:");
        System.out.println(BinarySearch(arr, 2));
        System.out.print("6在数组中的索引:");
        System.out.println(BinarySearch(arr, 6));

        arr = new int[]{24, 21, 6, 11, 8, 22, 32, 31, 54, 72, 61, 78, 88, 83};
        System.out.print("88在数组中的索引:");
        System.out.println(PartitionSearch(arr, 88));

    }

    //顺序查找
    public static int SearchSeq(int[] arr, int key) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == key)
                return i;
        }
        return -1;
    }

    //折半查找,有序序列
    public static int BinarySearch(int[] arr, int key) {
        int low = 0, high = arr.length - 1, mid;

        while (low <= high) {
            mid = (low + high) / 2;
            if (arr[mid] == key) {
                return mid;
            } else if (arr[mid] < key) {
                low = mid + 1;
            } else high = mid - 1;
        }

        return -1;


    }

    //分块查找,块内无序,块间有序
    //过程模拟
    public static int PartitionSearch(int[] arr, int key) {
        //对arr手动分块,已知arr的情况

        IndexTable indexTable1=new IndexTable();
        IndexTable indexTable2=new IndexTable();
        IndexTable indexTable3=new IndexTable();
        IndexTable indexTable4=new IndexTable();

        IndexTable []tables={indexTable1,indexTable2,indexTable3,indexTable4};

        tables[0].setIndex(0);
        tables[0].setMaxData(24);
        tables[1].setIndex(6);
        tables[1].setMaxData(54);
        tables[2].setIndex(9);
        tables[2].setMaxData(78);
        tables[3].setIndex(12);
        tables[3].setMaxData(88);

        tables[0].setCount(6);
        tables[1].setCount(3);
        tables[2].setCount(3);
        tables[3].setCount(2);

        for (int i = 0; i < tables.length; i++) {
            if (key == tables[i].getMaxData()|| key<tables[i].getMaxData()&&i==0) {
                for (int j = tables[i].getIndex(); j < tables[i].getIndex() + tables[i].getCount(); j++) {
                    if (arr[j] == key)
                        return j;
                }
            }
        }


        for (int i = 0; i < tables.length - 1; i++) {
            if (key > tables[i].getMaxData() && key < tables[i + 1].getMaxData()) {
                for (int j = tables[i + 1].getIndex(); j < tables[i + 1].getIndex() + tables[i + 1].getCount(); j++) {
                    if (arr[j] == key)
                        return j;
                }
                return -1;
            }


        }
        return -1;

    }

}

创建一个索引表对象,用来分块

java 复制代码
public class IndexTable {
    private int maxData;
    private int index;

    private int count;


    public IndexTable() {
    }

    public int getMaxData() {
        return maxData;
    }

    public void setMaxData(int maxData) {
        this.maxData = maxData;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
}
相关推荐
金銀銅鐵5 小时前
为什么枚举类中可以定义抽象方法
java·后端·ai编程
文丑颜不良啊7 小时前
LeetCode1941~1960题目解析
java·leetcode
txxzjmzlh7 小时前
SpringBoot 统⼀功能处理
java·spring boot·后端
nice_lcj5209 小时前
Java Lambda 表达式入门:怎么写、怎么用、常用方法有哪些
java·开发语言·后端·面试
码农小河669 小时前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql
老师我太想进步了202610 小时前
【数据结构-4】算法美学之顺序表
数据结构·算法
风影同志7832410 小时前
编码器是激活函数吗?—— 一个看起来很像、其实不是的类比
算法
SL_staff10 小时前
从配置失效到逻辑复用:JVS-Logic 如何构建可治理的业务编排中枢
java·spring·产品
特立独行的猫A10 小时前
一份 Markdown 发十个平台:cspub 一稿多投
java·后端·python
UIU11410 小时前
P1481 魔族密码
c++·算法·动态规划