数据结构----------顺序查找,折半查找和分块查找(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;
    }
}
相关推荐
郝学胜-神的一滴1 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
JH30732 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
颜酱3 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_736919103 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878383 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
Coder_Boy_3 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
DuHz3 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
invicinble3 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
Polaris北极星少女3 小时前
TRSV优化2
算法
较真的菜鸟3 小时前
使用ASM和agent监控属性变化
java