Sortowanie przez kopcowanie - problem.

0

Witam. Mam do zrobienie program, który z wprowadzonych wartości dla znaku P wybiera najmniejsze wartości, a dla G największe. Warunkiem jest użycie kopca. O to co mi się na razie udało napisać:

// paczki.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
void przywroc_kopiec(int t[],int i,int lp);
void build_kopiec(int lp, int t[]);
void sortuj(int t[], int lp, int b[]);
void znajdz_max(int t[], int lp);


int main()
{int lp,lprz,nrp;
int t[100],b[100];
char znak;
cin >> lp;
cin >> lprz;
for (int i=0; i<lp;i++){
	cin >> nrp;
t[i]=nrp;}
build_kopiec(lp,t);
sortuj(t,lp,b);
for(int i=0;i<lprz;i++){
	
	cin >> znak;
if(znak=='P'){
	cout << b[lp-1]<<endl;
	lp--;

	}
if (znak=='G')
{
cout<<b[0]<<endl;
b[0] = b[lp-1];
lp--;
build_kopiec(lp,b);
}
}

  getchar();
  getchar();
	return 0;
}

void przywroc_kopiec(int t[],int i,int lp)
{
int lewa,prawa,max,temp;
lewa=2*i;
prawa=2*i+1;
if(lewa<=lp && t[lewa]>t[i])
max=lewa;
else max=i;
 
if(prawa<=lp && t[prawa]>t[max])
max=prawa;
if(max!=i)
{
temp=t[i];
t[i]=t[max];
t[max]=temp;
przywroc_kopiec(t,lp,max);}
}
void build_kopiec(int lp, int t[])
{ for (int i=lp/2;i>=0;i--)
przywroc_kopiec(t,i,lp);
}
void sortuj(int t[], int lp, int b[])
{ int i;
for(i=0;i<lp;i++){
b[i]=t[0];
t[0] = t[lp-1];
build_kopiec(lp,t);
}
}

Problem ma się tak, że dla pewnych cyfr działa to dobrze, ale gdy wpisze te same cyfry, ale w innej kolejności to już jest coś nie tak. Czy ktoś mógłby mnie naprowadzić gdzie robię błąd ?

0

nazywaj zmienne i parametry funkcji sensownie, bo sam się zaraz pogubisz w tych wszystkich t, b, lp.

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