数据结构----------顺序查找,折半查找和分块查找(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;
    }
}
相关推荐
To_OC1 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
腻害兔1 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
2401_841495642 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
码智社2 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖3 小时前
JDK 26 新特性详解
java·开发语言
马优晨4 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
爱刷碗的苏泓舒6 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
维天说7 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane19947 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端