algorytm.org

Implementacja w C/C++



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Sortowanie stogowe (heapsort) - Implementacja w C/C++
Ocena użytkownikóww: *****  / 22
SłabyŚwietny
Nadesłany przez Marian, 16 lutego 2011 21:39
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

heap_2_c.cpp:
/*
Mariusz Redwanz
HeapSort - sortowanie stogowe
www.algorytm.org
*/

#include<iostream>
using namespace std;

void heapify (int *tab, int heap_size, int i)
{
	int largest, temp;
	int l=2*i, r=(2*i)+1;
	if (l<=heap_size && tab[l]>tab[i])
		largest=l;
	else largest=i;
	if (r<=heap_size && tab[r]>tab[largest])
		largest=r;
	if (largest!=i)
	{
		temp=tab[largest];
		tab[largest]=tab[i];
		tab[i]=temp;
		heapify(tab,heap_size,largest);
	}
}
void budKopiec(int *tab, int rozmiar)
{
	for (int i=rozmiar/2;i>0;i--)
		heapify(tab,rozmiar, i);
}

void sort(int *tab, int rozmiar)
{
	int temp;
	budKopiec(tab, rozmiar);
	for (int i=rozmiar;i>1;i--)
	{
		temp=tab[i];
		tab[i]=tab[1];
		tab[1]=temp;
		rozmiar--;
		heapify(tab,rozmiar,1);
	}
}

int main()
{
	int rozmiar;
	cin>>rozmiar;
	int *tab=new int[rozmiar+1];

	for (int i=1;i<=rozmiar;i++)
		cin>>tab[i];

	sort (tab,rozmiar);

	for (int i=1;i<=rozmiar;i++)
		cout<<tab[i] << " ";
	cout << endl;

	return 0; 
} 
Komentarze
photo
+9 # gracjan 2013-11-26 16:18
przed return 0 z main powinno być delete [] tab

jest to istotne żeby nie porobić wycieków. Pozdrawiam :)
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-12 # assan 2015-11-24 15:58
twierdzisz, że po "return 0;" będzie wyciek? czego i gdzie? :>
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+5 # Mattioo 2014-02-12 17:21
Racja, prawo jest takie..dynamicznie tworzysz tablice? nie zapominaj o zwalnianiu miejsca ;]
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # MariuszM 2017-07-22 02:05
Można zmienić rekurencję na iterację
dając w ciele całej procedury pętlę
repeat until (w C jest to do while)
i zachowując indeks rodzica dany jako parametr
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz