<< | к задаче | главная | печатать | обсудить(0 сообщений) >>
Задача: Оптимизация последовательного поиска
Исходник: Последовательный поиск, оптимизация первая: добавление метки [C#, code #59, hits: 6475, рейтинг: 3/7,4.89(2109)] +
автор: this [добавлен: 21.02.2006] управление:
  1. public int SSearch2(int[] x, int t)
  2. {
  3. int size = x.Length;
  4.  
  5. // Временно сохраняем последний
  6. int hold = x[size-1];
  7.  
  8. /* Если последний элемент искомый
  9. * то это нужно проверять сразу
  10. */
  11. if (hold == t) return size - 1;
  12.  
  13. x[size - 1] = t;
  14.  
  15. int i = 0;
  16. while (true)
  17. {
  18. if (x[i] == t) break;
  19. i++;
  20. }
  21.  
  22. // Восстанавливаем значение последнего
  23. x[size - 1] = hold;
  24.  
  25. if (i == size-1)
  26. {
  27. return -1;
  28. }
  29. return i;
  30. }
Последовательный поиск, оптимизация первая: добавление метки.

Вместо последнего элемента - пишем искомый элемент. Благодаря этому цикл всегда будет находить наш элемент. Только если его действительно нет в исходном массиве - его индекс будет равен (size-1), что равносильно его отсутствию.

При этом ситуацию, когда искомый элемент находится в конце исходного массива - нужно отфильтровывать в самом начале, т.к. потом присутствие искомого элемента в конце - приравнивается к отрицательному результату поиска.

+добавить реализацию
 
каталог | задачи | паттерны | исходники | стат | форумы | карта сайта | контакты | ссылки 
© 2000-2017 CodeLAB Group
  Все права защищены
Страница сгенерирована за 0.004521 секунд
Количество запросов к БД: 9, gzip: 3.2kb/9.7kb(67%)