Valaki segít ennek a programnak a megírásában?
Ezt a shell rendezést kell megírni c++-ban, de hiába csináltam, ahogy le van írva, nem működik jól.
procedure SHELL_RENDEZ1(A)
LK ← {100,30,8,3,1}
for k ← 1 to méret(LK) do
lépésköz ← LK[k]
for eltolás ← 1 to lépésköz do
i ← lépésköz + eltolás
while i ≤ méret(A) do
kulcs ← A[i]
j ← i - lépésköz
while j ≥ 1 és A[j] > kulcs do
A[j + lépésköz] ← A[j]
j ← j - lépésköz
end while
A[j + lépésköz] ← kulcs
i ← i + lépésköz
end while
end for
end for
end procedure
Ez az amit írtam, de nem működik :/
void shell(vector<int>& A)
{
vector<int> LK = {101,31,8,3,1};
for (int k = 1; k<LK.size();++k)
{
int lepeskoz = LK[k];
for(int eltolas = 1; eltolas<lepeskoz; ++eltolas)
{
int i = lepeskoz + eltolas;
while(i <= A.size())
{
int kulcs = A[i];
int j = i - lepeskoz;
while(j>=1 && A[j] > kulcs)
{
A[j+lepeskoz] = A[j];
j = j-lepeskoz;
}
A[j+lepeskoz] = kulcs;
i = i + lepeskoz;
}
}
}
}
Nem lehetne a teljes programot? És ne ide, hanem valami kódmegosztó oldalra, példának okáért:
Nem nagyon értek hozzá, de úgy látom, az a fő probléma, hogy a pascal-szerű pszeudokódnak megfelelően 1-től indexelsz a ciklusokban. Ihol egy kísérlet a programod módosítására:
Teszteld más értékekkel és tömbméretekkel is, nekem úgy tűnik, hogy működik.
„tömbméretekkel”
Ööö... már úgy értem, más méretű vektorokkal...
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!