Линейный и двоичный поиск в списке - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте!! Дан список, содержащий 10 записей, каждая из которых имеет структуру: Шифр товара (тип строка,5 символов)|Наименование товара(тип строка, 20 символов) | Цена(руб.) (число типа real) |Признак наличия или отсутствия (К примеру, KW462,Эл.чайник "KENWOOD" ,3000,Отсутствует MO463,Блендер "Moolinex" ,5000,В наличии BR095,Соковыжималка "BORK",9000,Отсутствует PH453,DVD-плеер "Philips" ,10000,Отсутствует BB346,Смартфон"BlackBerry",21500,Отсутствует PH674,Телевизор "Philips" ,24000,Отсутствует SM434,Телевизор "SAMSUNG" ,26000,В наличии SH564,Холодильник "SHARP" ,29000,В наличии H4844,Принтер+сканер"HP" ,30000,В наличии SM567,Ультрабук "SAMSUNG" ,35500,Отсутствует) Список упорядочен по возрастанию цены.Разработать алгоритмы и программы линейного и двоичного поиска всех товаров имеющих цену, не меньше 25000 руб. с выводом найденных записей на экран. Помогите,пожалуйста! Заранее большое спасибо!

Решение задачи: «Линейный и двоичный поиск в списке»

textual
Листинг программы
using System;
using System.Net;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication26
{
    class Product : IComparable<Product>
    {
        private string code;
        private string name;
        public decimal price { get; set; }
        public bool isHave { get; set; }
 
        public Product(string _code, string _name, decimal _price, bool _isHave)
        {
            Code = _code;
            Name = _name;
            price = _price;
            isHave = _isHave;
        }
 
        public string Code
        {
            get { return code; }
            set
            {
                if (value.Length <= 5) code = value;
                else code = null;
            }
        }
 
        public string Name
        {
            get { return name; }
            set
            {
                if (value.Length <= 20) name = value;
                else name = null;
            }
        }
 
        public int CompareTo(Product prod)
        {
            if (prod == null) return 1;
 
            if (this.price > prod.price) return 1;
            else if (this.price < prod.price) return -1;
            return 0;
        }
 
        public override string ToString()
        {
            return string.Format("Шифр товара: {0},Наименование товара: {1},Цена: {2},Наличие: {3}", this.Code, this.Name, this.price, this.isHave == true ? "Да" : "Нет");
        }
    }
 
    static class Search
    {
        public static List<Product> LinearSearch(List<Product> lst, int tempPrice)
        {
            List<Product> temp = new List<Product>();
            foreach (Product i in lst)
            {
                if (i.price >= tempPrice)
                {
                    temp.Add(i);
                    Console.WriteLine(i.ToString());
                }
            }
            return temp;
        }
 
        public static List<Product> BinarySearch(List<Product> lst, int tempPrice)
        {
            int productIndex = 0;
            List<Product> temp = new List<Product>();
            temp.AddRange(lst);
            List<Product> outList = new List<Product>();
 
            if (tempPrice <= temp[temp.Count - 1].price)
            {
                while (true)
                {
                    if (temp.Count != 1)
                    {
                        if (temp[temp.Count / 2].price > tempPrice)
                        {
                            temp.RemoveRange(temp.Count / 2, temp.Count / 2);
                        }
                        else if (temp[temp.Count / 2].price < tempPrice)
                        {
                            productIndex += temp.Count / 2;
                            temp.RemoveRange(0, temp.Count / 2);
                        }
                        else
                        {
                            productIndex += temp.Count / 2;
                            break;
                        }
                    }
                    else
                    {
                        productIndex += temp.Count / 2 + 1;
                        break;
                    }
                }
            }
 
            if (productIndex != 0)
            {
                for (int i = productIndex; i < lst.Count; i++)
                {
                    outList.Add(lst[i]);
                    Console.WriteLine(lst[i].ToString());
                }
            }
            return outList;
        }
    }
 
    class Program
    {
        static void Main()
        {
            List<Product> lst = new List<Product>() { 
                new Product("H4844", "Принтер+сканер\"HP\"", 30000, true),
                new Product("SM567", "Ультрабук\"SAMSUNG\"", 35500, false),
                new Product("KW462", "Эл.чайник\"KENWOOD\"", 3000, false),
                new Product("MO463", "Блендер\"Moolinex\"", 5000, true),
                new Product("BR095", "Соковыжималка\"BORK\"", 9000, false),
                new Product("PH453", "DVD-плеер\"Philips\"", 10000, false),
                new Product("BB346", "Смартфон\"BlackBerry\"", 21500, false),
                new Product("PH674", "Телевизор\"Philips\"", 24000, false),
                new Product("SM434", "Телевизор\"SAMSUNG\"", 26000, true),
                new Product("SH564", "Холодильник\"SHARP\"", 29000, true),
            };
 
            lst.Sort();
 
            List<Product> binaryResult = Search.BinarySearch(lst, 35500);
            Console.WriteLine("--------------------------------------------------------------------------------");
            List<Product> linearResult = Search.LinearSearch(lst, 25000);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.667 из 5
Похожие ответы