Forum: PC-Programmierung Zahlen sortieren


von c anfänger (Gast)


Lesenswert?

Hallo, ich bin dabei etwas über Arrays zu lernen. Ich möchte das mein 
Programm 5 Zahlen ihrer Größe nach ordnet.Das macht es leider nicht. 
Hier ist mein Quellcode, vielleicht könnt ihr mir da helfen.Danke schon 
mal.

#include<iostream>
using namespace std;
int main (void)
{
int arr [5]= {17,-3,4,18,-9};
int hilf;
int i,j;

for (i=1;i <5;i++)
{
j=i;
while (j>0 & arr [ j ] <arr [ j -1 ] )
{
hilf = arr [ j ];
arr [ j ] = arr [ j - 1 ];
arr [ j - 1 ] = hilf;
j-- ;
}
}
cout << arr [ j ];
system ("Pause");
return 0;
}

von Peter II (Gast)


Lesenswert?

c anfänger schrieb:
> Das macht es leider nicht.

doch macht es, nur die Ausgabe ist bei dir nicht sinnvoll.

von c anfänger (Gast)


Lesenswert?

Es scheitert also an der Ausgabe.Hab schon vieles probiert jedoch kommt 
nichts gescheites bei raus

von Tamy (Gast)


Lesenswert?

Hallo,

setze die Bedingung so ein
while (j>0 & (arr [ j ] <arr [ j -1 ]) )
{
---
---
---
cout << arr [ j ];
}

von Dennis S. (eltio)


Lesenswert?

Tamy schrieb:
> while (j>0 & (arr [ j ] <arr [ j -1 ]) )

Sicher, dass hier der binäre Operator genommen werden sollte?

von Tamy (Gast)


Lesenswert?

schau mal nach C-Programmierung: Liste der Operatoren nach Priorität:

http://de.wikibooks.org/wiki/C-Programmierung:_Liste_der_Operatoren_nach_Priorität

von Tamy (Gast)


Lesenswert?

und versuch mal den code selbst zu debuggen.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Das logische UND (&&) ist hier auf jeden Fall dem bitweisen (&)
vorzuziehen, da es für j=0 auf Grund seiner "Kurzschluss"-Eigenschaft
den Lesezugriff auf arr[-1] (undefined behavior) verhindert.

von Vlad T. (vlad_tepesch)


Lesenswert?

c anfänger schrieb:
> Es scheitert also an der Ausgabe.Hab schon vieles probiert jedoch kommt
> nichts gescheites bei raus

es scheitert an mehreren Sachen.
Zuerst daran, dass du beim posten keine Code tags verwendet hast.
Dann daran, dass deine Ausgabe nur ein element ausgibt.
Dann daran, dass du bit operatoren anstatt von logischen benutzt (was in 
diesem Fall aber wahrscheinlich sogar gutgeht)
Dann daran, dass du bis auf cout C anstatt c++ schreibst.

Tamy schrieb:
> Hallo,
>
> setze die Bedingung so ein
> while (j>0 & (arr [ j ] <arr [ j -1 ]) )
> {
> ---
> ---
> ---
> cout << arr [ j ];
> }

was soll es bringen einzelne Array Elemente während des Sortiervorgang 
auszugeben?

Ich würde es so in etwa schreiben:
1
#include <iostream>
2
#include <array>
3
#include <algorithm>
4
5
int main (void)
6
{
7
  std::array<int, 5> arr =  {17,-3,4,18,-9};
8
  int i,j;
9
10
  for (i=1; i < arr.size(); i++)  {
11
    for( j=i; (j>0) && (arr[j] < arr[j-1]); --j) { 
12
      std::swap(arr[j], arr[j-1]);
13
    }
14
  }
15
16
  for(const auto& s: arr){
17
     std::cout << s << ' ';
18
  }
19
20
  system ("Pause");
21
  return 0;
22
}

: Bearbeitet durch User
von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Wenn C++ dann C++:
1
std::sort( arr.begin(), arr.end() );

Bubble Sort ist echt nicht aus den Köpfen heraus zu bekommen ;-)

von Yalu X. (yalu) (Moderator)


Lesenswert?

Torsten Robitzki schrieb:
> Wenn C++ dann C++:
>
>  std::sort( arr.begin(), arr.end() );
>
> Bubble Sort ist echt nicht aus den Köpfen heraus zu bekommen ;-)

Darum geht es primär doch gar nicht:

c anfänger schrieb:
> Hallo, ich bin dabei etwas über Arrays zu lernen.

Aber selbst wenn er etwas über Sortieralgorithmen lernen wollte: Wird er
sein Ziel erreichen, wenn er einfach eine fertige Bibliotheksfunktion
aufruft? ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.