Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sortowanie przez kopcowanie c++

Ostatnio zmodyfikowano 2022-01-10 17:55
Autor Wiadomość
mirek7331
Temat założony przez niniejszego użytkownika
Sortowanie przez kopcowanie c++
» 2022-01-10 06:29:39
Uczę się na temat sortowania przez kopcowanie.
Chciałbym dowiedzieć się jak mogę przerobić ten kod, aby używać tablicy numerowanej od 0, przekazać do wszystkich napisanych funkcji tablicę i adres zmiennej licznik oraz połączyć te dwie rzeczy i stworzyć jedną funkcję heapsort.

C/C++
#include <iostream>
#include <stdlib.h>
#include<time.h>


using namespace std;


int heap[ 100 ];
int licznik = 0;


void FixFromBelow()
{
   
int walker = licznik;
   
while( walker > 1 )
   
{
       
if( heap[ walker ] > heap[ walker / 2 ] )
       
{
           
swap( heap[ walker / 2 ], heap[ walker ] );
           
walker = walker / 2;
       
}
       
else
       
{
           
break;
       
}
    }
}


void FixFromAbove()
{
   
int walker = 1;
   
int _max = walker;
   
for(;; ) {
       
_max = walker;
       
if( walker * 2 <= licznik && heap[ walker * 2 ] > heap[ _max ] )
       
{
           
_max = walker * 2;
       
}
       
if( walker * 2 + 1 <= licznik && heap[ walker * 2 + 1 ] > heap[ _max ] )
       
{
           
_max = walker * 2 + 1;
       
}
       
if( _max != walker ) {
           
swap( heap[ walker ], heap[ _max ] );
           
walker = _max;
       
} else {
           
break;
       
}
       
    }
}

void Add( int num )
{
   
licznik++;
   
heap[ licznik ] = num;
   
FixFromBelow();
}

int Get()
{
   
swap( heap[ 1 ], heap[ licznik ] );
   
licznik--;
   
FixFromAbove();
   
return heap[ licznik + 1 ];
}

int main()
{
   
Add( 12 );
   
Add( 10 );
   
Add( 7 );
   
Add( 10 );
   
Add( 2 );
   
Add( 6 );
   
Add( 21 );
   
Add( 100 );
   
   
for( int i = 1; i <= licznik; i++ )
   
{
       
cout << heap[ i ] << ", ";
   
}
   
   
cout << endl << "wyjmuje kolejno 4 elementy z kopca :" << endl;
   
for( int i = 0; i < 4; i++ ) cout << "wyjalem " << Get() << endl;
   
   
cout << "kopiec wyglada tak: " << endl;
   
for( int i = 1; i <= licznik; i++ )
   
{
       
cout << heap[ i ] << ",";
   
}
   
   
return 1;
}
P-179192
nanoant20
» 2022-01-10 14:14:12
 jak mogę przerobić ten kod, aby używać tablicy numerowanej od 0
W takich językach jak C/C++ czy C# Indeksowanie elementów zawsze zaczyna się od zera
jedynie co pamiętam to w Pascal'u indeksowanie wartości zaczyna się od 1

przekazać do wszystkich napisanych funkcji tablicę i adres zmiennej licznik
Przekazywanie tablic jednowymiarowych do funkcji
Funkcje, a słowo kluczowe return

Możesz też rozważyć korzystanie z kontenera std::vector zamiast tablic
Kontener std::vector<>
P-179193
mirek7331
Temat założony przez niniejszego użytkownika
» 2022-01-10 14:56:38
Głownie chciałbym dowiedzieć się jak stworzyć używając tych funkcji jedną funkcję heapsort, która używa tych podfunkcji. Mógłbym prosić o przedstawienie jakby to miało wyglądać
P-179194
pekfos
» 2022-01-10 17:55:40
jak mogę przerobić ten kod, aby używać tablicy numerowanej od 0
Odejmij 1 od wszystkich indeksów.
P-179195
« 1 »
  Strona 1 z 1