Proszę o sprawdzenie kodu, czy dobrze napisałem program do sortowania karcianego(przez wstawianie)

0

Witam.
Próbuje napisać program w C++ który stosuje sortowanie tzw. karciane.
Nie wiem czy dobrze to napisałem.
Program działa, ale męczyłem się jakiś czas.
Zawsze przypominało mi sortowanie bąbelkowe, więc nie wiem już czy udało mi się napisać sortowanie karciane.
Wszelkie uwagi będą mile widziane.
Jeśli jednak i tak zrobiłem źle to proszę o wytłumaczenie bo już nie wiem jak to inaczej ugryźć.

#include <iostream>
#include <time.h>
#include <iomanip>
#include <cstdlib>
#define ROZMIAR_TAB 50
using namespace std;
void losujLiczby(int tab[],int zakres)
{
    srand(time(NULL));
    for(int i=0;i<zakres;i++)
    {
        tab[i]=rand()%2001-1000;
        for(int j=0;j<i;j++)
        {
            if(tab[j]==tab[i])
            {
                i--;
                break;
            }
        }
    }

}
int szukajNajmniejszej(int tab[], int pocz,int zakres)
{
    int min=pocz;
    for(int i=pocz+1;i<zakres;i++)
    {
        if(tab[i]<tab[min])min=i;
    }
return min;
}
void sortowanie(int tab[],int rozmiar)
{
    int i=0;
    while(i<rozmiar)
    {
        swap(tab[i],tab[szukajNajmniejszej(tab,i,rozmiar)]);
        i++;
    }
}

void wyswietl(int tab[],int rozmiar){
    for(int i=0;i<rozmiar;i++)
    {
        if(i%10==0)cout<<endl;
        cout<<setw(7)<<tab[i];
    }
}
int main(){
    int tab[ROZMIAR_TAB];
    losujLiczby(tab,ROZMIAR_TAB);
    wyswietl(tab,ROZMIAR_TAB);
    cout<<endl;
    sortowanie(tab,ROZMIAR_TAB);
    wyswietl(tab,ROZMIAR_TAB);
return 0;
}
0

a czemu nie mozesz skorzystac z std::sort() tylko piszesz wlasne nieoptymalne sortowanie?

0

Po to żeby samemu się nauczyć jak to robić. Korepetytor właśnie mi napisał, że napisałem sortowanie przez wybieranie a nie wstawianie. Więc już nie wiem jak ja mam to napisać żeby było sortowanie karciane.

0

Dobra. Chyba zrobiłem.

///
///Sortowanie karciane
///
#include <iostream>
#include <ctime>
#include <iomanip>
#include <cstdlib>
#define ROZMIAR_TAB 50
using namespace std;
void wylosuj_liczby(int tab[],int rozmiar)
{
    srand(time(NULL));
    for(int i=0;i<rozmiar;i++)
    {
        tab[i]=rand()%2001-1000;
        for(int j=0;j<i;j++)
        {
            if(tab[i]==tab[j])
            {
                i--;
                break;
            }
        }
    }
}
int szukajNajmniejszej(int tab[], int pocz,int zakres)
{
    int min=pocz;
    for(int i=pocz+1;i<zakres;i++)
    {
        if(tab[i]<tab[min])min=i;
    }
return min;
}
void sortowanie(int tab[],int zakres)
{
    int tmp;
    int min;
    for(int i=0;i<zakres;i++){
        min=szukajNajmniejszej(tab,i,zakres);
        tmp=tab[min];
    for(int j=min;j>i;j--){
        tab[j]=tab[j-1];
    }
    tab[i]=tmp;
    }
}



void wyswietl(int tab[],int rozmiar){
    for(int i=0;i<rozmiar;i++)
    {
        if(i%10==0)cout<<endl;
        cout<<setw(7)<<tab[i];
    }
}

int main()
{
    int tab[ROZMIAR_TAB];
    wylosuj_liczby(tab,ROZMIAR_TAB);
    wyswietl(tab,ROZMIAR_TAB);
    cout<<endl;
    sortowanie(tab,ROZMIAR_TAB);
    cout<<endl;
    wyswietl(tab,ROZMIAR_TAB);
    return 0;
}

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