Линейный и двоичный поиск в списке - 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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д