sortowanie shella przeksztalcenie z jezyka C++ na C

0

Witam, mam mały problem, próbowałem przekrztałcić program napisany w C++ na C, wszystko sie kompiluje ale oczywiscie nie dziala tak jak potrzeba, jestem poczatkujacym programista, dlatego prosze o pomoc z tym kodem i ukazanie bledów jakie zrobiłem:

Program napisany w C++

// Sortowanie metodą Shella
//--------------------------------------------------------
// (C)2012 I LO w Tarnowie
// I Liceum Ogólnokształcące
// im. K. Brodzińskiego
// w Tarnowie
//--------------------------------------------------------

#include <cmath>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>

using namespace std;

const int N = 20; // Liczebność zbioru.

// Program główny
//---------------

int main()
{
int d[N],h,i,j,x;

cout << " Sortowanie metoda Shella\n"
"--------------------------\n"
" (C)2005 Jerzy Walaszek\n\n"
"Przed sortowaniem:\n\n";

// Najpierw wypełniamy tablicę d[] liczbami pseudolosowymi
// a następnie wyświetlamy jej zawartość

srand((unsigned)time(NULL));

for(i = 0; i < N; i++) d[i] = rand() % 100;
for(i = 0; i < N; i++) cout << setw(4) << d[i];
cout << endl;

// Wyznaczamy wartość początkowego przesunięcia

for(h = 1; h < N; h = 3 * h + 1);
h /= 9;
if(!h) h++; // istotne dla małych N, dla większych można pominąć!

// Sortujemy

while(h)
{
for(j = N - h - 1; j >= 0; j--)
{
x = d[j];
i = j + h;
while((i < N) && (x > d[i]))
{
d[i - h] = d[i];
i += h;
}
d[i - h] = x;
}
h /= 3;
}

// Wyświetlamy wynik sortowania

cout << "Po sortowaniu:\n\n";
for(i = 0; i < N; i++) cout << setw(4) << d[i];
cout << endl;
return 0;
}


Program porpawiony, w C:

// Sortowanie metodą Shella
//--------------------------------------------------------
// (C)2012 I LO w Tarnowie
// I Liceum Ogólnokształcące
// im. K. Brodzińskiego
// w Tarnowie
//--------------------------------------------------------

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

const int N = 20; // Liczebność zbioru.

// Program główny
//---------------

int main()
{
int d[N],h,i,j,x;

printf(" Sortowanie metoda Shella\n"
"--------------------------\n"
" (C)2005 Jerzy Walaszek\n\n"
"Przed sortowaniem:\n\n");

// Najpierw wypełniamy tablicę d[] liczbami pseudolosowymi
// a następnie wyświetlamy jej zawartość

srand((unsigned)time(NULL));

for(i = 0; i < N; i++) d[i] = rand() % 100;
for(i = 0; i < N; i++) printf("setw(4) << d[i]");

// Wyznaczamy wartość początkowego przesunięcia

for(h = 1; h < N; h = 3 * h + 1);
h /= 9;
if(!h) h++; // istotne dla małych N, dla większych można pominąć!

// Sortujemy

while(h)
{
for(j = N - h - 1; j >= 0; j--)
{
x = d[j];
i = j + h;
while((i < N) && (x > d[i]))
{
d[i - h] = d[i];
i += h;
}
d[i - h] = x;
}
h /= 3;
}

// Wyświetlamy wynik sortowania

printf("Po sortowaniu:\n\n");
for(i = 0; i < N; i++);
system("PAUSE");
return 0;
}

Z góry dziękuję za pomoc.

1

cout << setw(4) << d[i]; <==> printf("%4d",d[i]);

0

niestety nadal nic, wyswietla sie jedynie dodatkowo wynik sortowania tablicy, ale zamiast losowac liczby, to wyrzuca na ekran elementy tablicy prze sortowaniem, tak to wyglada:

0

według mnie, gdzies w tej czesci jest blad:

srand((unsigned)time(NULL));

for(i = 0; i < N; i++) d[i] = rand() % 100;
for(i = 0; i < N; i++) printf("setw(4) << d[i]");

0

Ok, racja, tak to jest jak cos robi sie za szybko, niby wszystko jest ok wyswietla tablice, tylko ze po sortowaniu jest cos nie tak :)

0

Oki, tak czy siak, dziekuje za pomoc _13th_Dragon :) Jezeli jednak ktoś zna odpowiedź na nurtujące mnie pytanie, proszę o odpowiedź, pozdrawiam.

0

Oki, przeanalizowałem cały kod i wszystko pieknie sie sortuje, bardzo dziekuje za pomoc :)

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