Xairro.com

Login
Schliessen

Willkommen im Xairroversum! Ein kostenloser Account bei uns bietet dir mehrere Vorteile. Welche das genau sind, kannst du in der Tour erfahren. Viel Spaß!

Login

Register

Binäre Suche

In diesem Artikel erkläre ich in einem Video die binäre Suche und die Vorteile gegenüber der sequentiellen Suche. Ausserdem gibt es eine Beispielimplementierung.

Videoerklärung

Beispielimplementierung in Python

Diese Beispielimplementierungen stellen jeweils eine Funktion bereit, welche die Position eines Elementes in einer Liste bestimmt.

Iterativ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python

def binSuche(elemente, element):
	left = 0
	right = len(elemente)

	while left <= right:
		center = (left+right)/2
		if elemente[center] == element:
			return center
		if elemente[center] > element:
			right = center-1
		if elemente[center] < element:
			left = center+1
	return -1

if __name__ == "__main__":
	elemente = range(10)
	print binSuche(elemente, 5)

Rekursiv

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python

def binSucheRec(elemente, element, left=0, right=None):
	if not right:
		right = len(elemente)
	if left > right:
		return -1
	center = (left+right)/2
	if elemente[center] == element:
		return center
	if elemente[center] > element:
		return binSucheRec(elemente, element, left, center-1)
	if elemente[center] < element:
		return binSucheRec(elemente, element, center+1, right)

if __name__ == "__main__":
	elemente = range(10)
	print binSucheRec(elemente, 5)

Implementierung in C

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <stdlib.h>

int binSearch(int** list, int count, int search) {
	int center;
	int left = 0;
	int right = count-1;
	while(left<=right) {
		center = (left+right)/2;
		if(list[center] == search)
			return center;
		if(list[center] > search)
			right = center-1;
		if(list[center] < search)
			left = center+1;
	}
	return -1;
}

int main() {
    // ordered list of items
    int items[] = { 0x01, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0F,
                    0x10, 0x15, 0x1C, 0x1E, 0x23, 0x24, 0x25,
                    0x27, 0x2B, 0x2C, 0x3A, 0x3B, 0x3D };

    // search element 0x07
    int index = binSearch(&items;, sizeof(items)/sizeof(int), 0x07);
    printf("found at index %d\n", index);
    return 0;
}

0 comments

Sorry but there are no comments for this entry. What about writing the first one?

Post comment

Zum Kommentieren musst du angemeldet sein.

About the author

Lukas

Lukas aka BlitzChecker programmiert seit 2003 in diversen Programmiersprachen. Spezialisiert hat er sich auf die Webprogrammierung und Linux Administration. Sein Fachwissen gibt er gerne in Artikeln auf Xairro weiter.

Weitere Informationen gibt es in seinem Userprofil auf Xairro und auf seiner privaten Homepage.

Tags

ausserdem beispielimplementierung bereit bestimmt binsearch binsuche binsucherec center center-1 count count-1 def eines element elemente elementes erkläre gegenüber gibt implementierung include int iterativ jeweils left len list liste none python rekursiv return right search stellen suche usr videoerklärung vorteile welche