Skip to content

Основни алгоритми са низовима

Линеарно претраживање низа

Провера да ли се одређена вредност налази у низу.

На пример, на којој позицији се у низу A[] = { 3, -9, 1, 5, 0, 8, -2 } налази вредност 5

	int A[] = { 3, -9, 1, 5, 0, 8, -2 };
	int n = sizeof(A) / sizeof(A[0]);
    for (int i = 0; i < n; i++)
        if (A[i] == 5)
            printf("Nalazi se na poziciji %d", i);

или, колико елемената у низу A[] = { 5, -9, 1, 5, 0, 5, -2 } има вредност 5:

	int A[] = { 5, -9, 1, 5, 0, 5, -2 };
	int n = sizeof(A) / sizeof(A[0]);
	int br = 0;
	for (int i = 0; i < n; i++)
		if (A[i] == 5)
			br++;
    printf("U nizu A ukupno %d elemenata ima vrednost 5", br);

Одређивање минимума и максимума

Који елемент у низу A[] = { 3, -9, 1, 5, 0, 8, -2 } има најнижу вредност и на којој се позицији налази…

    int A[] = { 3, -9, 1, 5, 0, 8, -2 };
    int n = sizeof(A) / sizeof(A[0]);
    int min = A[0], ind = 0;
    for (int i = 1; i < n; i++)
        if (A[i] < min)
        {
            min = A[i];
            ind = i;
        }
    printf("A[%d] = %d", ind, min);

…а који највишу?

    int A[] = { 3, -9, 1, 5, 0, 8, -2 };
    int n = sizeof(A) / sizeof(A[0]);
    int max = A[0], ind = 0;
    for (int i = 1; i < n; i++)
        if (A[i] > max)
        {
            max = A[i];
            ind = i;
        }
    printf("A[%d] = %d", ind, max);

Бинарно претраживање низа

Провера да ли се одређена вредност налази у сортираном низу.

На којој позицији се вредност 5 налази у сортираном низу A[] = { -2, 0, 1, 4, 5, 8, 9 }.

	int A[] = { -2, 0, 1, 4, 5, 8, 9 };
	int n = sizeof(A) / sizeof(A[0]);
    int levo = 0, desno = n - 1;
    while (levo <= desno)
    {
        int sredina = (levo + desno) / 2;
        if (A[sredina] == 5)
        {
            printf("Nalazi se na poziciji %d", sredina);
            return 0;
        }
        if (A[sredina] < 5)
            levo = sredina + 1;
        else
            desno = sredina - 1;
    }

Инвертовање низа

Замена елемената низа тако да први постане последњи, други претпоследњи и тако редом.

Инвертовање низа A користећи помоћни низ B (лоше решење, јер нема потребе користити помоћни низ):

    int A[] = { 3, -9, 1, 5, 0, 8, -2 }, B[7];
    int n = sizeof(A) / sizeof(A[0]);
    for (int i = 0; i < n; i++) // upis invertovanih u B
        B[i] = A[n - 1 - i];
    for (int i = 0; i < n; i++) // kopiranje iz B u A
        A[i] = B[i];

Инвертовање низа A без коришћења помоћног низа:

    int A[] = { 3, -9, 1, 5, 0, 8, -2 };
    int n = sizeof(A) / sizeof(A[0]);
    for (int i = 0; i < n / 2; i++)   // zamena prvog i poslednjeg
    {                                 // drugog i pretposlednjeg
        int temp = A[i];              // itd, sve dok se ne dodje do
        A[i] = A[n - 1 - i];          // sredine niza
        A[n - 1 - i] = temp;
    }

Ротирање низа

Померање елемената низа за одређен број места улево или удесно.

Ротирање низа A[] = { 3, -9, 1, 5, 0, 8, -2 } за два места у лево…

    int A[] = { 3, -9, 1, 5, 0, 8, -2 };
    int n = sizeof(A) / sizeof(A[0]);
    for (int i = 0; i < 2; i++)     // rotiranje niza A za 2 mesta
    {                               // u levo
        int temp = A[0];
        for (int j = 1; j < n; j++)
            A[j - 1] = A[j];
        A[n - 1] = temp;
    }

…односно за X места у десно:

    int A[] = { 3, -9, 1, 5, 0, 8, -2 };
    int n = sizeof(A) / sizeof(A[0]);
    for (int i = 0; i < 2; i++)
    {
        int temp = A[n - 1];
        for (int j = n - 1; j > 0; j--)
            A[j] = A[j - 1];
        A[0] = temp;
    }

Сажимање

Избацивање елемената из низа.

На пример, избаци елемент A[3] из низа A[] = { 3, -9, 1, 5, 0, 8, -2 }:

    int A[] = { 3, -9, 1, 5, 0, 8, -2 };
    int n = sizeof(A) / sizeof(A[0]);
    for (int i = 3; i < n - 1; i++) {
        A[i] = A[i + 1];
    }
    n--;

Избаци из низа A[] = { 3, -9, 1, 5, 0, 8, -2 } први елемент који има вредност 5:

    int A[] = { 3, -9, 1, 5, 0, 8, -2 };
    int n = sizeof(A) / sizeof(A[0]);
    int indeks = -1;
    for (int i = 0; i < n; i++) // Pronalazi se prvi element
        if (A[i] == 5)          // sa indeksom 5
        {
            indeks = i;
            break;
        }
    if (indeks != -1)          // Ako je indeks pronadjen
    {                          // izbacuje se iz niza
        for (int i = indeks; i < n - 1; i++)
            A[i] = A[i + 1];
        n--;
    }

Избаци из низа A[] = { 5, -9, 1, 5, 0, 5, -2 } све елементе који имају вредност 5:

    int A[] = { 5, -9, 1, 5, 0, 5, -2 };
    int n = sizeof(A) / sizeof(A[0]);
    int velicina = 0;
    for (int i = 0; i < n; i++)
        if (A[i] != 5)           // Kopiraju se svi elementi
        {                        // koji su razliciti od 5
            A[velicina] = A[i];
            velicina++;
        }
    n = velicina;

Проширивање (експандовање) низа

Уметање нових чланова у низ.

На позицију 3 у низ A[] = { 3, -9, 1, 5, 0, 8, -2 } уметни елемент који има вредност 100:

    int A[8] = { 3, -9, 1, 5, 0, 8, -2 };
    int n = 7;
    for (int i = n; i > 3; i--)
        A[i] = A[i - 1];
    A[3] = 100;
    n++;