Halbe Suchmethode der Datenstruktur – implementiert in C-Sprache

Konzept:

Die binäre Suchmethode wird auch als binäre Suchmethode bezeichnet. Diese Methode erfordert, dass die Tabelle mit der Suche eine sequentielle Speicherstruktur ist und die Schlüsselgrößen in der Tabelle der Reihe nach angeordnet sind.

Suchvorgang:

Bestimmen Sie zunächst das Intervall, in dem sich der zu durchsuchende Datensatz befindet, und passen Sie dann schrittweise die Intervallgröße an, indem Sie den zu suchenden Wert mit dem Mittelwert des Intervalls vergleichen, und verengen Sie den Bereich weiter, bis er gefunden wird oder nicht mehr gefunden werden kann .

spezifische Methode:

Vergleichen Sie den Mittelwert der Tabelle mit dem zu suchenden Wert. Wenn beide gleich sind, ist die Suche erfolgreich. Andernfalls verwenden Sie die Datensätze bis zur Mitte, um die Tabelle in zwei Untertabellen zu unterteilen. Wenn der zu suchende Wert größer als der Mittelwert des Intervalls ist, setzen Sie die Suche in der letztgenannten Untertabelle fort. ; Andernfalls suchen Sie in der vorherigen Untertabelle. Wiederholen Sie den obigen Vorgang, bis der Zielwert gefunden ist. Anschließend ist die Suche erfolgreich. Andernfalls existiert das Ziel nicht und die Suche schlägt fehl.

Algorithmusidee:

Die „Teile-und-Herrsche-Methode“ „bricht“ kontinuierlich ein großes Intervall in zwei Hälften, sucht in einem kleinen Intervall danach und teilt und erobert es.

Beispiel:

Beschreibung der Frage:
Geben Sie zehn beliebige Ganzzahlen ein, geben Sie dann eine weitere Ganzzahl ein und verwenden Sie die „Halbsuchmethode“, um zu überprüfen, ob die Zahl in der Reihenfolge enthalten ist. Wenn es existiert, geben Sie seine Seriennummer aus; andernfalls geben Sie aus, dass es nicht existiert.
Hinweis: Die Situation großer Ganzzahlen wird nicht berücksichtigt.
Analyse: Erstens können die zehn eingegebenen Ganzzahlen ungeordnet sein, daher müssen sie zuerst mit der Auswahlsortiermethode sortiert werden. Verwenden Sie dann die binäre Suchmethode, um die zu suchende Nummer zu finden.

Code wie folgt anzeigen:

#include"stdio.h"
int main()
{
    
    
	void sort(int a[10],int m);//排序函数 
	void search(int a[10],int n);//查找函数 
	int a[10],n,i;
	printf("请输入10个整数:\n");
	for(i=0;i<10;i++)
	   scanf("%d",&a[i]);
	printf("请输入你想要查找的数字:\n");
	scanf("%d",&n);
	sort(a,10);
	search(a,n);
	return 0;
}
void sort(int a[10],int m)//选择排序法 
{
    
    
	int i,j,k,temp;
	for(i=0;i<m-1;i++)
	{
    
    
		k=i;
		for(j=i+1;j<m;j++)
		{
    
    
			if(a[j]<a[k])
			  k=j;
		}
		temp=a[i];a[i]=a[k];a[k]=temp;
	}
	printf("排序后:\n");
	for(i=0;i<m;i++)
	   printf("%d ",a[i]);
	printf("\n");
}
void search(int a[10],int n)
{
    
    
	int low=0,high=9,mid,flag;//low,high分别为区间的左端点和右端点,mid为区间中间,flag存放逻辑值 
	while(low<=high)
	{
    
    
		mid=(low+high)/2;//折半 
		if(n==a[mid])
		{
    
    
		  flag=1;//如果区间中间值等于待查找值,则查找成功,flag值为 1,为真 
		  break;//找到,则终止循环 
	    }
		else
		   if(n<a[mid])//待查找值小于中间值,则在前一半区间内继续查找 
		     high=mid-1;//调整右端点 
		   else if(n>a[mid])//待查找值大于中间值,则在后一半区间内继续查找 
		     low=mid+1;//调整左端点 
	}
	if(flag==1)//如果找到 
	  printf("found! 序号为:%d\n",mid+1);//mid为待查找值在数组中的下标,而mid+1才是人数数习惯中的下标 
	else
	  printf("NO found !\n");
}

Debugging-Ergebnisse:

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Zusammenfassen:

Halbe Suchmethode, auch als binäre Suchmethode bekannt. Gilt nur für geordnete Arrays oder Daten. Die Sucheffizienz ist höher als bei der sequentiellen Suche.
Das heißt, bei einem gegebenen Intervall [niedrig, hoch] ist der Anfangswert von niedrig 0 und der Anfangswert von hoch ist die Array-Länge minus eins. Halbieren: Mitte = (Niedrig + Hoch) / 2, jedes Mal, wenn der zu suchende Wert n mit dem Mittelwert a [Mitte] des Intervalls verglichen wird.
Wenn n <a [Mitte], bedeutet dies, dass der zu suchende Wert ist befindet sich auf der linken Seite der Mitte des Intervalls, dann liegt es vorne. Setzen Sie die Suche innerhalb der Hälfte des Intervalls fort, also hoch=Mitte-1.
Wenn n>a[mid] ist, bedeutet dies auf die gleiche Weise, dass der zu suchende Wert auf der rechten Seite der Mitte des Intervalls liegt und die Suche in der zweiten Hälfte des Intervalls fortgesetzt wird, also niedrig = mittel +1
bis n=a[mid], was bedeutet, dass die Suche erfolgreich ist. Zu diesem Zeitpunkt ist mid der Array-Index, in dem sich der zu suchende Wert befindet, der die mittlere + 1. Zahl in der Anzahl der Personen darstellt.
Allerdings Wenn hoch < niedrig, bedeutet dies, dass die Nummer in dieser Reihenfolge nicht vorhanden ist und die Suche fehlschlägt.

Supongo que te gusta

Origin blog.csdn.net/qq_52487066/article/details/113689372
Recomendado
Clasificación