Programmer's Wiki

A searching algorithm is an algorithm that aims to find an item within a collection of items.

There are many kinds of searching algorithms, including:

  • list search algorithms, which search for an item in a linear (one-dimensional) collection, for example, an array.
    • linear search, searches any list, runs in O(n). Typically a search like this would use a loop to iterate through the list until the required item was found.
    • binary search, searches a sorted list, runs in O(log n).
  • tree searching algorithms, which search for an item in a tree.
  • string searching algorithms, which search for patterns within strings

Bash[]

function in_array {
   for i in "${@:2}"; do
      [[ "$i" == "$1" ]] && return 0
   done
} 

haystack=("apple" "orange" "yellow banana")
in_array "orange" "${haystack[@]}" && echo found || echo not found

Go[]

func in_array(needle interface{}, haystack []interface{}) (exists bool) {
   for i := range haystack {
      if exists = haystack[i] == needle; exists {
         return
      }
   }
   return
}

Java[]

Java implements the binary search in both the Collections and Arrays classes.

JavaScript[]

From all modern browsers and IE9+ you can use Array.prototype.indexOf():

var present = haystack.indexOf(needle) > -1;

You can either polyfill the standard function with the above mentioned MDN article on indexOf() or use a simpler version:

function in_array(needle,haystack) {
	if(!haystack instanceof Array) throw 'Error: Haystack isn\'t an array.';
	for(var i in haystack) if(haystack[i]==needle) return true;
	return false;
}

Or if you use jQuery anyways:

var present = $.inArray(needle, haystack) > -1;

Perl[]

if(grep $_ eq $needle, @haystack) {
	print "Success!";
}

See Also[]