Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [c++] Bubblesort (https://www.delphipraxis.net/102776-%5Bc-%5D-bubblesort.html)

The Lord 4. Nov 2007 17:41


[c++] Bubblesort
 
Ich habe irgendwas gerade geändert und es funktioniert nicht mehr. Wo liegt der Fehler?

Code:
#include <iostream>
using namespace std;

int werte[] = {2,3,1};
int n = 3;

int main()
   {

   for(int i = 0; i < n; i++)
   {
     for(int j = 0; j < (n - 1); j++)
     {
      if(werte[j] > werte[j + 1])
      {
        int temp = werte[j];
         werte[j] = werte[j + 1];
         werte[j + 1] = temp;         
      }
     }
      cout << werte[i] << " \n"; //Ausgabe

        return 0;
   }
Sehr ihr ihn?

Gruß

Torpedo 4. Nov 2007 17:55

Re: [c++] Bubblesort
 
Ich würde mal die Ausgabe überdenken.
Und es fehlt noch ein }

The Lord 4. Nov 2007 18:02

Re: [c++] Bubblesort
 
Code:
for(int i=0;i<n;i++)
   {
      cout << werte[i] << " \n"; //Ausgabe
   }
Stimmt, wenn ich das nämlich in einer separaten Schleife laufen lasse, dann stimmt es wieder. Aber ich habe gerade Tomaten auf den Augen. Also entweder gebe ich es an der falschen Stelle aus, oder ich ändere i.

Ich schau nochmal drüber ;)

Torpedo 4. Nov 2007 18:06

Re: [c++] Bubblesort
 
Du musst es zuerst Sortieren und erst danach ausgeben. ;)
Und noch ein Tipp:
statt
cout << werte[i] << " \n";
sollte man schreiben:
cout << werte[i] << endl;

Weil der Zeilenumbruch je nach Betriebssystem anders ist und endl das je nach Betriebssystem richtig macht.
Also wenn man es für Linux kompiliert, macht es den Zeilenumbruch von Linux und wenn man es für Windows kompiliert, macht es den Zeilenumbruch für Windows.

hoika 4. Nov 2007 18:07

Re: [c++] Bubblesort
 
Hallo,

das ist kein richtiger Bubble-Sort

for(int i = 0; i < n; i++)
{
for(int j = i+1; j < (n - 1); j++)
{
int wert_i = werte[i];
int wert_j = werte[j};

if wert_j<wert_i
{
// exchange wert_i <-> wert_j
int temp_i = wert_i;
wert_i = wert_j,
wert_j = temp_i


Heiko

The Lord 4. Nov 2007 18:15

Re: [c++] Bubblesort
 
Zitat:

Zitat von hoika
Hallo,

das ist kein richtiger Bubble-Sort

for(int i = 0; i < n; i++)
{
for(int j = i+1; j < (n - 1); j++)
{
int wert_i = werte[i];
int wert_j = werte[j};

if wert_j<wert_i
{
// exchange wert_i <-> wert_j
int temp_i = wert_i;
wert_i = wert_j,
wert_j = temp_i


Heiko

Es sortiert aber ;) Ich habe total Probleme damit, dass man bei C++ von 0 anfängt zu zählen und habe auch sonstige Flüchtigkeitsfehler.

Danke für die Tipps :)

DMW 4. Nov 2007 19:46

Re: [c++] Bubblesort
 
Zitat:

Zitat von Torpedo
statt
cout << werte[i] << " \n";
sollte man schreiben:
cout << werte[i] << endl;

Weil der Zeilenumbruch je nach Betriebssystem anders ist und endl das je nach Betriebssystem richtig macht.
Also wenn man es für Linux kompiliert, macht es den Zeilenumbruch von Linux und wenn man es für Windows kompiliert, macht es den Zeilenumbruch für Windows.

Nein, das ist schon in Ordnung so. Der Zeilenumbruch für Windows-Textdateien lautet korrekt "\x0D\x0A" und wird von textbasierten Streams selbst produziert, wenn man "\n" streamt.
Der Manipulator endl sorgt außerdem nicht nur für einen Zeilenumbruch, sondern auch für das Leeren aller Puffer, also bei std::ostream-Objekten für die unmittelbare Ausgabe auf dem Bildschirm. Das ist ineffizient; es würde vollkommen ausreichen, nur ganz am Ende mit cout.flush () den Puffer zu leeren.

Zudem ist es, wenn nur ein einzelnes Zeichen gestreamt werden soll, effektiver, kein String-, sondern ein Character-Literal zu benutzen:
Code:
cout << werte[i] << '\n';

Zitat:

Zitat von The Lord
Ich habe total Probleme damit, dass man bei C++ von 0 anfängt zu zählen

Zu indizieren, nicht zu zählen.
Bei meinen Anfängen mit Delphi bin ich über das Vorurteil gestolpert, es sei dort anders - das ist nur bei Strings so, und das auch nur aus historischen Gründen.

Torpedo 4. Nov 2007 20:00

Re: [c++] Bubblesort
 
Zitat:

Zitat von DMW
Nein, das ist schon in Ordnung so. Der Zeilenumbruch für Windows-Textdateien lautet korrekt "\x0D\x0A" und wird von textbasierten Streams selbst produziert, wenn man "\n" streamt.
Der Manipulator endl sorgt außerdem nicht nur für einen Zeilenumbruch, sondern auch für das Leeren aller Puffer, also bei std::ostream-Objekten für die unmittelbare Ausgabe auf dem Bildschirm. Das ist ineffizient; es würde vollkommen ausreichen, nur ganz am Ende mit cout.flush () den Puffer zu leeren.

Echt? Na dann nehme ich alles zurück was ich geschrieben habe. Das ist aber alles auf dem Mist meines Infolehrers gewachsen. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz