• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czasy wykonywania algorytmu sortowań różnią się poprzez CodeBlocksa i terminal

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
366 wizyt
pytanie zadane 31 maja 2018 w C i C++ przez must Bywalec (2,980 p.)

Cześć.

Mam za zadanie porównać czasy działania algorytmów dla różnych sortowań dla różnych wielkości tablic.

Napisałem cały program.

Odpalam terminal, włączam program i za każdym razem mimo dużego rozmiaru liczb do posortowania wartość zawsze była bliska 0. Głowię się nad tym już od 2h i nie wiem o co chodzi.

Włączyłem CodeBlocksa i tam pokazuje w miarę możliwe do uzyskania wynika.

Oto wycinek z obu konsol:

https://zapodaj.net/971b359b814ac.png.html )

Oto kod:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include<time.h>

void shell_Sort(int *tab, int n)
{
    int i, j, increment, tmp;
    for(increment = n/2; increment > 0; increment /= 2)
    {
        for(i = increment; i < n; i++)
        {
            tmp = tab[i];
            for(j = i; j >= increment; j -= increment)
            {
                if(tmp < tab[j-increment])
                    tab[j] = tab[j-increment];
                else
                    break;
            }
            tab[j] = tmp;
        }
    }
}

void bubble_Sort(int *tab, int n)
{
    int j;
    bool swapped = true;
    int index =0;

    while(index < n-1 && swapped)
    {
        swapped = false;
        for(j = 0; j < n -1 ; j++)
            if(tab[j] > tab[j+1])
            {
                swap(tab,j,j+1);
                swapped = true;
            }
        index++;
    }
}

void insert_Sort(int *tab, int n)
{
    int i,x,j;

    for(i=1; i<n; i++)
    {
        x=tab[i];
        j=i-1;
        while(tab[j]>x && j>=0)
        {
            tab[j+1]=tab[j];
            j--;
        }
        tab[j+1]=x;
    }
}

void select_Sort(int *tab, int n)
{
    int minIndex,i,j;

    for(i=0; i<n; i++)
    {
        minIndex = i;

        for(j = i+1 ; j< n; j++)
        {
            if(tab[minIndex]>tab[j])
            {
                minIndex = j;
            }
        }
        if(minIndex!=i)
        {
            swap(tab,minIndex,i);
        }
    }
}

void swap(int *tab, int index1, int index2)
{
    int temp = tab[index1];
    tab[index1] = tab[index2];
    tab[index2] = temp;
}

void heap_Sort(int *tab, int n)
{
    int i;
    for( i = n / 2 - 1; i >= 0; i--)
    {
        checkMaxHeap(tab, n, i);
    }

    for( i = n - 1; i > 0; i--)
    {
        swap(tab, 0, i);
        --n;
        checkMaxHeap(tab, n, 0);
    }
}

void checkMaxHeap(int *tab, int heapSize, int parentIndex)
{
    int maximumIndex = parentIndex;
    int leftChild = parentIndex * 2 + 1;
    int rightChild = parentIndex * 2 + 2;

    if(leftChild < heapSize && tab[leftChild] > tab[maximumIndex])
    {
        maximumIndex = leftChild;
    }
    if(rightChild < heapSize && tab[rightChild] > tab[maximumIndex])
    {
        maximumIndex = rightChild;
    }
    if(maximumIndex != parentIndex)
    {
        swap(tab, maximumIndex, parentIndex);
        checkMaxHeap(tab, heapSize, maximumIndex);
    }
}

void quick_Sort(int *tab, int poczatek, int koniec)
{
    int i=poczatek,j=koniec,s,pom;

    s=tab[(i+j)/2];
    do
    {
        while (tab[i]<s)
            i++;
        while (tab[j]>s)
            j--;
        if(i<=j)
        {
            pom=tab[i];
            tab[i]=tab[j];
            tab[j]=pom;
            i++;

            j--;
        };
    }
    while(i<=j);
    if(j>poczatek)
        quick_Sort(tab,poczatek,j);
    if(i<koniec)
        quick_Sort(tab,i,koniec);
}


int main()
{
    int n, sortOption, typeOption,i ;

    printf("How many numbers do you want to sort?\n");
    scanf("%d", &n);

    int *tab = (int*)malloc(sizeof(int)*n);

    printf("Please input which numbers you want to sort <-100,100>:\n");
    printf("1. Random numbers\n2. Numbers sorted descending\n3. Numbers sorted ascending\n");
    scanf("%d", &typeOption);

    printf("Which type of sorting do you want to use?\n");
    printf("1. Bubble sort \n2. Insert Sort\n3. Select Sort\n4. Shell Sort\n5. Heap Sort\n6. Quick Sort\n");
    scanf("%d",&sortOption);

    switch(typeOption)
    {
    case 1:
    {
        FILE* fp = fopen("dane-test1.txt", "r");
        for(i = 0 ; i < n ; i++)
        {
            fscanf(fp, "%d", &tab[i]);
        }
        fclose(fp);
        break;
    }

    case 2:
    {
        FILE* fp = fopen("dane-test2.txt", "r");
        for(i = 0 ; i < n ; i++)
        {
            fscanf(fp, "%d", &tab[i]);
        }
        fclose(fp);
        break;
    }
    case 3:
    {
        FILE* fp = fopen("dane-test3.txt", "r");
        for(i = 0 ; i < n ; i++)
        {
            fscanf(fp, "%d", &tab[i]);
        }
        fclose(fp);
        break;
    }
    }

    clock_t start,stop;
    double time;
    start=clock();

    switch(sortOption)
    {
    case 1:
        bubble_Sort(tab,n);
        break;
    case 2:
        insert_Sort(tab,n);
        break;
    case 3:
        select_Sort(tab,n);
        break;
    case 4:
        shell_Sort(tab,n);
        break;
    case 5:
        heap_Sort(tab,n);
        break;
    case 6:
        quick_Sort(tab,0,n);
        break;
    }

    stop=clock();
    time=(double)(stop-start) / CLOCKS_PER_SEC;
    printf("Algorithm needed  %f seconds",time);
    free(tab);
}

 

1 odpowiedź

+1 głos
odpowiedź 31 maja 2018 przez Secrus Nałogowiec (32,880 p.)
wybrane 31 maja 2018 przez must
 
Najlepsza
Masz odpowiednie pliki w folderze, z którego uruchamiasz program w terminalu zwykłym? Nie masz kontroli poprawnego otwarcia pliku w kodzie, więc program notuje czas który potrzebował na działanie polegające na przejściu przez switch'a

To jedyne co przychodzi mi do głowy
komentarz 31 maja 2018 przez must Bywalec (2,980 p.)
....

Masakra. Zginął bym bez tego forum.

Taka drobnostka, tyle czasu w dupe:)

Dzieki

Podobne pytania

0 głosów
1 odpowiedź 709 wizyt
pytanie zadane 14 czerwca 2021 w C i C++ przez warzywko13 Użytkownik (840 p.)
0 głosów
1 odpowiedź 174 wizyt
pytanie zadane 29 kwietnia 2020 w PHP przez Hub ert Nowicjusz (170 p.)
+4 głosów
10 odpowiedzi 1,204 wizyt

93,187 zapytań

142,201 odpowiedzi

322,012 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2326p. - Łukasz Piwowar
  3. 2315p. - Łukasz Eckert
  4. 2269p. - Tomasz Bielak
  5. 2235p. - Łukasz Siedlecki
  6. 2006p. - Michal Drewniak
  7. 2006p. - rucin93
  8. 1964p. - CC PL
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1586p. - Dawid128
  14. 1520p. - Marcin Putra
  15. 1480p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...