SortArray



  • mir wurde gesagt, dass ich hier die for schleifen nicht klammern muss...naja, und wer kann mir nun weiterhelfen?



  • Solange for-Schleifen nur eine Zeile enthalten muß man auch nicht klammern. Es ist aber übersichtlicher und wartungsfreundlicher.
    Was für einen Fehler hast du denn? Das hast du uns ja noch nicht gesagt.



  • Student1 schrieb:

    mir wurde gesagt, dass ich hier die for schleifen nicht klammern muss...

    Das ist richtig, aber umso wichtiger ist eine korrekte Einrückung um deutlich zu machen, welche Codeteile zusammengehören.

    Nun dann, was heißt denn „will er nicht laufen“? Was für ein Fehler erscheint?

    Was sofort auffällt, ist, dass der Code ein Mix aus C und C++ ist. In C++ gibt es die von Dir verwendeten Header nicht. Stattdessen heißen die entsprechenden Header <cstdio>, <cstdlib> und <ctime>. Statt 'printf' würde man üblicherweise außerdem 'cout' verwenden (für all dies müsste dann noch der Namensbereich 'std' eingebunden werden).

    Ich befürchte, dass Du ein schlechtes oder veraltetes Lehrbuch verwendest.



  • ...oder - angesichts des Nicknames Student1 - einen schlechten oder veralteten Professor 😃



  • naja, ich schwinge mich immer zwischen c und c++ hin und her. es lässt sich alles kompilieren jedoch spuckt er dann keine zahlen aus, was er ja tun soll...



  • Erstmal solltest Du Dich für C oder C++ entscheiden.
    In C++ würde es eher so aussehen:

    #include <iostream>
    #include <ctime>
    #include <iterator> //ostream_iterator
    
    int main()
    {
        const int n = 100; 
        int a[n], temp;
        srand(static_cast<unsigned int>(time(NULL)));
        for(int i = 0; i < n; ++i)
    	a[i] = rand() % 100;
    
    	for(int i = 0; i < n; ++i)
    	{
    		for(int j = i + 1; j < n; ++j)
    		{
    			if(a[j] < a[i])
    			{
    				temp = a[i];
    				a[i] = a[j];
    				a[j] = temp;
    			}
    		}
    	}
    	std::copy(a, a+n, std::ostream_iterator<int>(std::cout, ", "));
    }
    


  • so, nochmal ein bisschen abgeändert, aber funzen tuts noch immer nicht...

    #include <stdio.h>   // include C input/output functions
    #include <string>    // include C++ string
    #include <fstream>   // include C++ file stream
    #include <iostream>  // include C++ input/output streams
    #include <time.h>
    
    using namespace std;  // use C++ std namespace
    
    int main ()
    {
      int b=1;
      while (b==1)
        {
        const int n=100000;
        int a[n] ,i,j;
        int h;  //hilfszeile
    
        srand (time(NULL));
    
        for (i=0; i<n; i++)
             a[i]=rand()%1000;
    
             /*beginn des algorithmus*/
             for(i=0; i<n; i++)
               for(j=0; j<n; j++)
                 if (a[j]<a[i])
                 {
                 h=a[j];
                 a[j]=a[i];
                 a[i]=h;
                 }  /*ende des algorithmus*/
    
                 /* ausgabe (zum teil)*/
                 for (i=0; i<100; i++)
                    cout<<("%d, ",a[i]);
             cout<<endl;
    
             cout<<"Bitte geben Sie eine 1 ein zum Fortfahren und eine 2 zum beenden!"<<endl;
             cin>>b;
        }
                    return 0;
    }
    


  • Na, Du kannst nicht einfach von 'printf' auf 'cout' wechseln und dann so tun, als würde es genauso funktionieren.

    Folgende Ausgabe sollte aber klappen:

    for (size_t i = 0; i < 100; ++i)
        cout << a[i] << ", ";
    cout << endl;
    


  • Falls das jemand lesen möchte, habe ich es mal durch einen Sourcecode-Formatierer gejagt:

    int main ()
    {
    	int b=1;
    	while (b==1)
    	{
    		const int n=100000;
    		int a[n] ,i,j;
    		int h;  //hilfszeile
    
    		srand (time(NULL));
    
    		for (i=0; i<n; i++)
    			a[i]=rand()%1000;
    
    		/*beginn des algorithmus*/
    		for (i=0; i<n; i++)
    			for (j=0; j<n; j++)
    				if (a[j]<a[i])
    				{
    					h=a[j];
    					a[j]=a[i];
    					a[i]=h;
    				}  /*ende des algorithmus*/
    
    		/* ausgabe (zum teil)*/
    		for (i=0; i<100; i++)
    			cout<<("%d, ",a[i]);
    		cout<<endl;
    
    		cout<<"Bitte geben Sie eine 1 ein zum Fortfahren und eine 2 zum beenden!"<<endl;
    		cin>>b;
    	}
    	return 0;
    }
    

    So, und zum Problem: Du kannst bei der Ausgabe mit cout beliebig viele Argumente beliebigen Typs mit << aneinanderketten. Formatstrings haben mit cout überhaupt nichts am Hut. Der Ausdruck ("%d, ", a[i]) ergibt nicht das, was Du willst.

    cout << a[i] << endl
    


  • Also bei mir funktioniert dein Programm ... auch ohne einen Umstieg auf cout.

    Aber... braucht 35,824 sekunden zum terminieren.
    Der nachteil von Bubble Sort bei vielen Weten 😉

    Trotz allem finde auch ich das du entweder bei C oder bei C++ bleiben solltest.


  • Mod

    dark-eye schrieb:

    Der nachteil von Bubble Sort bei vielen Weten 😉

    Das ist kein Bubble-Sort. Es ist zweifellos eine Sortierfunktion, allerdings mit hoher Laufzeitkomplexität.



  • camper schrieb:

    dark-eye schrieb:

    Der nachteil von Bubble Sort bei vielen Werten 😉

    Das ist kein Bubble-Sort. Es ist zweifellos eine Sortierfunktion, allerdings mit hoher Laufzeitkomplexität.

    Na aber fasst wäre es einer geworden ... wie wollen doch hier keine Erbsen Zählen 🤡


Anmelden zum Antworten