|
Serwis Edukacyjny w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2026 mgr Jerzy Wałaszek
|
ProblemW n-elementowym zbiorze Z należy wyszukać element posiadający pożądane własności. |
Wyszukiwanie liniowe (ang. linear
search), zwane również sekwencyjnym
(ang. sequential search) polega na przeglądaniu kolejnych elementów
W przypadku pesymistycznym, gdy poszukiwanego elementu nie ma w zbiorze lub
też znajduje się on na samym końcu zbioru, algorytm musi wykonać
n obiegów pętli sprawdzającej poszczególne elementy. Wynika z tego, iż pesymistyczna klasa złożoności obliczeniowej jest równa
Często chcemy znaleźć wszystkie wystąpienia w zbiorze poszukiwanej wartości elementu. W takim przypadku algorytm na wejściu powinien otrzymywać dodatkowo pozycję (indeks) elementu, od którego ma rozpocząć wyszukiwanie. Pozycję tę przy kolejnym przeszukiwaniu podajemy zawsze o 1 większą od ostatnio znalezionej. Dzięki temu nowe poszukiwanie rozpocznie się tuż za poprzednio znalezionym elementem.
K01: Dla i = p, p+1, …, n-1: ; przeglądamy kolejne elementy wykonuj K02 K02: Jeśli Z[i] = k, ; jeśli napotkamy poszukiwany element, to zakończ z wynikiem i ; zwracamy jego pozycję K03: Zakończ z wynikiem -1 ; jeśli elementu nie ma w tablicy, ; zwracamy -1
|
Uwaga: Zanim uruchomisz program, przeczytaj wstęp do tego artykułu, w którym wyjaśniamy funkcje tych programów oraz sposób korzystania z nich. |
| Program odczytuje z pierwszego wiersza liczbę n. Z następnych n wierszy odczytywane jest n danych całkowitych. W ostatnim wierszu odczytywana jest liczba k, którą należy wyszukać wśród podanych n liczb. Program wypisuje numer pozycji w odczytanym ciągu liczb, na której znajduje się liczba k lub -1, jeśli liczby nie odnaleziono. |
Pascal// Wyszukiwanie liniowe
// Data: 26.04.2008
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
program prg;
type Tint = array of integer;
function Szukaj(var T : Tint;
n, k, p : integer)
: integer;
var i : integer;
begin
Szukaj := -1;
for i := p to n-1 do
if T[i] = k then
begin
Szukaj := i; break;
end
end;
var
Z : Tint;
n, k, i: integer;
begin
readln(n);
SetLength(Z, n);
for i := 0 to n-1 do
readln(Z[i]);
readln(k);
writeln;
writeln(Szukaj(Z, n, k, 0));
writeln;
SetLength(Z, 0);
end. |
// Wyszukiwanie liniowe
// Data: 26.04.2008
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
#include <iostream>
using namespace std;
int Szukaj (int T[],
int n,
int k,
int p)
{
for(int i = p; i < n; i++)
if(T[i] == k) return i;
return -1;
}
int main()
{
int *Z, n, k, i;
cin >> n;
Z = new int[n];
for(i = 0; i < n; i++)
cin >> Z[i];
cin >> k;
cout << endl << Szukaj(Z, n, k, 0)
<< endl << endl;
delete [] Z;
return 0;
} |
Basic' Wyszukiwanie liniowe
' Data: 26.04.2008
' (C)2020 mgr Jerzy Wałaszek
'---------------------------
Function Szukaj (T As Integer Ptr, _
n As Integer, _
k As Integer, _
p As Integer) _
As Integer
Dim i As Integer
Szukaj = -1
For i = p To n-1
If T[i] = k Then
Szukaj = i
Exit For
End If
Next
End Function
Dim Z As Integer Ptr
Dim As Integer n, k, i
Open Cons For Input As #1
Input #1, n
Z = New Integer[n]
For i = 0 To n-1
Input #1, Z[i]
Next
Input #1, k
Close #1
Print
Print Szukaj(Z, n, k, 0)
Print
Delete [] Z
End |
Python
(dodatek)# Wyszukiwanie liniowe
# Data: 21.02.2024
# (C)2024 mgr Jerzy Wałaszek
# ---------------------------
def szukaj(t, n, k, p):
for i in range(p, n):
if t[i] == k:
return i
return -1
n = int(input())
z = [int(input()) for i in range(n)]
k = int(input())
print()
print(szukaj(z, n, k, 0))
print()
z = None
|
| Wynik: | ||
5 13 18 954 235 12 235 3 |
5 13 18 954 235 12 119 -1 |
|
|
Uwaga: Zanim uruchomisz program, przeczytaj wstęp do tego artykułu, w którym wyjaśniamy funkcje tych programów oraz sposób korzystania z nich. |
| Program wypełnia 100 elementową
tablicę Z całkowitymi liczbami pseudolosowymi z zakresu
|
Pascal// Wyszukiwanie liniowe
// Data: 26.04.2008
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
program prg;
var
Z : array [0..99] of integer;
L : array [0..99] of boolean;
i, w : integer;
begin
randomize;
w := random(10);
for i := 0 to 99 do
begin
Z[i] := random(10);
L[i] := Z[i] = w;
end;
writeln(w); writeln;
for i := 0 to 99 do
begin
if L[i] then
write(' ->')
else
write(' ');
write(Z[i]);
end;
writeln;
end. |
// Wyszukiwanie liniowe
// Data: 26.04.2008
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int Z[100], i, w;
bool L[100];
srand(time(NULL));
w = rand() % 10;
for(i = 0; i < 100; i++)
{
Z[i] = rand() % 10;
L[i] = (Z[i] == w);
}
cout << w << endl << endl;
for(i = 0; i < 100; i++)
{
if(L[i]) cout << " ->";
else cout << " ";
cout << Z[i];
}
cout << endl << endl;
return 0;
} |
Basic' Wyszukiwanie liniowe
' Data: 26.04.2008
' (C)2020 mgr Jerzy Wałaszek
'---------------------------
Dim As Integer Z(99), i, w
Dim As Byte L(99)
Randomize
w = Cint(Rnd*9)
For i = 0 To 99
Z(i) = Cint(Rnd*9)
L(i) = (Z(i) = w)
Next
Print w;
Print
For i = 0 To 99
If L(i) Then
Print Using " ->#";Z(i);
Else
Print Using " #";Z(i);
End If
Next
Print
End |
Python
(dodatek)# Wyszukiwanie liniowe
# Data: 21.02.2024
# (C)2024 mgr Jerzy Wałaszek
# --------------------------
import random
z = []
zl = []
w = random.randrange(10) # Szukana wartość
for i in range(100):
z.append(random.randrange(10))
zl.append(z[i] == w)
print(w)
print()
c = 0
for i in range(100):
if zl[i]:
print(" ->%1d" % z[i], end="")
else:
print(" %1d" % z[i], end="")
c += 1
if c == 20:
print()
c = 0
print()
|
| Wynik: |
3 4 2 2 5 1 2 6 6 4 4 9 6 0 7 8 0 2 5 4 8 5 2 5 ->3 9 7 6 ->3 1 ->3 6 5 1 7 4 9 5 ->3 7 8 1 5 7 4 6 2 1 2 4 0 6 1 6 4 7 8 1 4 9 2 7 0 6 8 7 6 4 1 7 8 4 8 ->3 8 2 8 7 0 7 6 2 6 0 6 4 0 5 0 8 ->3 2 7 9 0 1 7 5 4 9 9 |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.