Задача: Последовательный поиск и его оптимизации
Исходник: Последовательный поиск, версия #2, язык: C# [code #59, hits: 10972]
автор: 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), что равносильно его отсутствию.

При этом ситуацию, когда искомый элемент находится в конце исходного массива - нужно отфильтровывать в самом начале, т.к. потом присутствие искомого элемента в конце - приравнивается к отрицательному результату поиска.
Тестировалось на: MS Visual Studio 2005, .NET Framework 2.0

+добавить реализацию