首页 > 代码库 > 各种算法五

各种算法五

各种算法五

 我们来看看基本的超找滴呀;

 在我们的算法中,有一种叫做线性查找。

 分为:顺序查找。

         折半查找。

顺序查找:

    这种非常简单,就是过一下数组,一个一个的比,找到为止。

 ps 顺便看到一个go相关的博客,我记录一下:http://blog.csdn.net/tybaoerge/article/details/50392386  

   //基本的顺序查找太简单,其实就是找到你想要的额匹配项了滴呀;
        public static void LookUp()
        {
            List<int> list = new List<int>() { 2, 3, 5, 8, 7 };
            var result = GetIndex(list, 3);
            if (result != -1)
                Console.WriteLine("索引位置为:" + result);
            else
                Console.WriteLine("没有找到!");
            Console.Read();


        }

        static int GetIndex(List<int> list, int key)
        {
            for (int i = 0; i < list.Count; i++)
            {
                if (key == list[i])
                    return i; //返回制定的索引滴呀;
            }
            return -1;
        }

分半查找方式滴呀;这种方式,仅仅限于我们的奇数个值滴呀;可惜了~~~

      static int GetIndex01(List<int> list, int key)
        {
            //这种方式就要分我们的奇数个还是我们的偶数个了滴呀;
            //这个折半,也是那么简单的折半滴呀;
            var len = list.Count;
            var half = list.Count / 2;
            for (int i = 0; i < half; i++)
            {
                //其实这种比较的没有太大的比较,但依然可以看成是一种简单额优化吧;
                if (list[i] == key)
                {
                    return i;
                }
                if (list[len - 1-i] == key)
                {
                    return len - 1 - i;
                }
            }
            return -1;
        }

当然,我们可以进一步的各种优化滴呀;效果还是不错滴呀;

这样就算找到了我们比较通用的方法了;效果还是不错滴呀;恩恩,样滴呀;

       static int GetIndex02(List<int> list, int key)
        {
            //这种方式就要分我们的奇数个还是我们的偶数个了滴呀;
            //这个折半,也是那么简单的折半滴呀;
            var len = list.Count;
            var low = 0;
            var high = (len - 1);
            for (int i = 0; i < len; i++)
            {
                if (low <= high)  //这样我们的查找就可以继续滴呀;
                {
                    if (list[low] == key)
                    {
                        return low;
                    }
                    else
                    {
                        low++;
                    }
                    if (list[high] == key)
                    {
                        return high;
                    }
                    else
                    {
                        high--;
                    }
                }
              
            }
            return -1;
        }

总结:

//如果使用平法的话;就会出现下面额情况滴呀;
//如果是偶数的话,那么就敲好评分了;
//如果是奇数的话,那么就会出现左右相差一的情况;

//如果是low 和 high 两个指针的话,应该就是
//左右两边刚好相等;
//如果是奇数的话,low 和high 会指到统一index,然后再比较;
//效果非常好的呀;

 

折半查找

          使用折半查找是必须有前提滴呀;

  第一: 数组必须有序,不是有序就必须让其有序,大家也知道最快的排序也是NLogN的,所以.....呜呜。

  第二: 这种查找只限于线性的顺序存储结构。

 

各种算法五