• 索引查找——算法系列


    索引查找

    其实这个算法没有怎么理解了。

    上代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    //哈希查找程序
    namespace Test
    {
        class Program
        {
            //索引实体
            class IndexItem
            {
                public int index;
                public int start;
                public int length;
            }
    
            static void Main(string[] args)
            {
                Console.WriteLine("原始数据为:" + string.Join(",", students));
                int value = 205;
                Console.WriteLine("\n插入数据" + value);
                var index = insert(value);
                if (index == 1)
                {
                    Console.WriteLine("\n插入后数据: " + string.Join(",", students));
                    Console.WriteLine("\n插入元素:205在数组中的位置为:{0}", indexSearch(205) + "");
                }
                Console.ReadLine();
            }
    
            static int[] students = {
                                        101,102,103,104,105,0,0,0,0,0,
                                        201,202,203,204,0,0,0,0,0,
                                        301,302,303,0,0,0,0,0,0
                                    };
    
            static IndexItem[] indexItem = {
                                               new IndexItem(){index=1,start=0,length=5},
                                               new IndexItem(){index=2,start=10,length=4},
                                               new IndexItem(){index=3,start=20,length=3}
                                           };
    
            public static int insert(int key)
            {
                IndexItem item = null;
                var index = key / 100;
                int i = 0;
                for (i = 0; i < indexItem.Count(); i++)
                {
                    if (indexItem[i].index == index)
                    {
                        item = new IndexItem()
                        {
                            start = indexItem[i].start,
                            length = indexItem[i].length
                        };
                        break;
                    }
                }
                if (item == null)
                    return -1;
                students[item.start + item.length] = key;
                indexItem[i].length++;
                return 1;
            }
    
            public static int indexSearch(int key)
            {
                IndexItem item = null;
                var index = key / 100;
                for (int i = 0; i < indexItem.Count(); i++)
                {
                    if (indexItem[i].index == index)
                    {
                        item = new IndexItem()
                        {
                            start = indexItem[i].start,
                            length = indexItem[i].length
                        };
                        break;
                    }
                }
    
                if (item == null)
                    return -1;
                for (int i = item.start; i < item.start + item.length; i++)
                {
                    if (students[i] == key)
                        return i;
                }
                return -1;
            }
    
        }
    }
  • 相关阅读:
    putty GB18030乱码
    iptables小复习
    编译安装 openswan-2.6.34
    Windows常用的命令
    MySql实现远程连接
    防盗链
    java判断一个类是否公共类
    oracle sql性能
    状态模式让我们远离战战兢兢
    LVM管理
  • 原文地址:https://www.cnblogs.com/7ants/p/2984222.html
Copyright © 2020-2023  润新知