sortowanie shella przy różnych ciągach przyrostów

0

Zbadać doświadczalnie złożoność obliczeniową algorytmu sortowania Shella przy różnych ciągach przyrostów. Należy sprawdzić ciągi dające rezultaty O(n^2), O(n^4/3),O(n^3/2) (można je znaleźć np. tu: http://pl.wikipedia.org/wiki/Sortowanie_Shella) . Dodatkowo należy przeprowadzić doświadczenia dla 3 własnych ciągów. Doświadczenia zilustrować odpowiednimi wykresami.

Rozumiem sortowanie przez wstawianie i wszystko ale w ogóle nie rozumiem tego polecenia, umie mi ktoś po ludzku wytłumaczyć co ja mam zrobić?? Co to są ciągi przyrostów? Czy krok to to samo co odstęp???

0

Tu mam kod co powinnam poprawić aby otrzymać te ciągi przyrostów?

#include <stdlib.h>
#include <time.h>
using namespace std;

void InsertSort(int tab[], int rozmiar, int krok)
{
    for(int i=krok; i<rozmiar; i++)
    {
        int temp=tab[i];
        int idx=i-krok;
        while(idx>=0 && tab[idx]>temp)
        {
            tab[idx+1]=tab[idx];
            idx-=krok;
        }
        tab[idx+krok]=temp;
    }
}


int main()
{
    int rozmiar=100000;
    int*tab1= new int[rozmiar];
    int*tab2= new int[rozmiar];
    for(int i=0;i<rozmiar;i++)
    {
        tab1[i]=tab2[i]=rand();
    }
    int c1=clock();
    InsertSort(tab1,rozmiar,1);
    int c2=clock();
    InsertSort(tab2,rozmiar,10)
    InsertSort(tab2,rozmiar,3);
    InsertSort(tab2,rozmiar,1);
    int c3=clock();
    cout<<c2-c1<<"..."<<c3-c2;
    return 0;
}```
1

Wszystko jest dokładnie opisane na wikipedii. Badając, na przykład, złożoność kwadratową (pierwszy przykład z tabelki), ciąg h - sortowań, kończący się jedynką, bierzemy zgodnie ze wzorem:
floor(N / 2^k), dla k >= 1.
Czyli dla przykładu poniżej, będą to 5 - sortowanie, 2 - sortowanie, i 1 - sortowanie (czyli normalne sortowanie przez wstawianie całej tablicy, a h sortowania są opisane w artykule):

	int N = 10;
	int tab [10] = {3, 6, 9, 10, 2, 7, 23, 1, 20, 10};
	insertSort(tab, N, floor(N / 2)); // start k = 1, floor(N / 2^1) = 5
	insertSort(tab, N, floor(N / 4)); // k = 2, floor(N / 2^2) = 2
	insertSort(tab, N, floor(N / 8)); // k = 3, floor(N / 2^3) = 1
	printArray(tab, N); // tu juz ma byc posortowana cala

1 użytkowników online, w tym zalogowanych: 0, gości: 1