Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.96 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <vector>
  6. #include <stdlib.h>
  7. #include <time.h>
  8. #include <stack>
  9. using namespace std;
  10.  
  11. //Liste von Zufallszahlen erzeugen
  12. vector<double> generate_func()
  13. {
  14.     cout << "Wie viele zufällige Zahlen möchtest du erzeugen?" << endl;
  15.     int anzahl_rand_numbers=10;
  16.     //cin >> anzahl_rand_numbers;
  17.     cout << endl << "Zufallszahlen:" << endl;
  18.    
  19.     double random_number=0;
  20.     vector<double> unsort_feld(anzahl_rand_numbers);
  21.  
  22.     for (int i=0; i<anzahl_rand_numbers; i++)
  23.     {
  24.         random_number = rand()%100;
  25.         unsort_feld[i] = random_number;
  26.         cout << random_number << ", ";     
  27.     }
  28.     cout << endl;
  29.    
  30.     return unsort_feld;
  31. }
  32.  
  33. //Liste von Zahlen einlesen
  34. vector<double> input_func()
  35. {
  36.     ifstream list ("list.txt");
  37.     // Prüfe ob die Datei offen ist
  38.     if (!list.is_open())
  39.     {
  40.         throw 404;
  41.     }
  42.  
  43.     //Ausgabe des inputs
  44.     cout << "Input:" << endl;
  45.     string line;
  46.     int anzahl=0;
  47.     while (list.good())
  48.     {
  49.         getline (list,line);
  50.         cout << line << ", ";
  51.         anzahl++;
  52.     }
  53.     cout << endl;
  54.  
  55.     //Einlesen in Feld
  56.     vector<double> unsort_feld(anzahl);
  57.     int i=0;
  58.     //An Anfang der Liste gehen
  59.     list.seekg( ios_base::beg );
  60.     //Fehlerstatus der Liste leeren
  61.     list.clear();
  62.     while (list.good())
  63.     {
  64.         list >> unsort_feld[i];
  65.         ++i;
  66.     }
  67.     list.close();
  68.    
  69.     return unsort_feld;
  70. }
  71.  
  72. //Quick Sort Algorithmus
  73. void quick_sort(vector<double> unsort_feld)
  74. {
  75.     int left=0, right;
  76.     double pivot;
  77.     int i, j;
  78.     double swap;
  79.     right = unsort_feld.size()-1;
  80.     stack<int> mem;
  81.    
  82.     //äußere Schleife
  83.     while (true)
  84.     {
  85.         if (left < right)
  86.         {
  87.             //Auswahl eines zufälligen Elements
  88.             pivot = unsort_feld[left + rand() % (right - left)];
  89.             i = left; //unsort_feld[(left+right)/2];
  90.             j = right;
  91.             //innere Schleife, teile Feld
  92.             while (true)
  93.             {
  94.                 while (unsort_feld[i] < pivot) i++;
  95.                 while (unsort_feld[j] > pivot) j--;
  96.                 if(i>=j) break;
  97.                 swap = unsort_feld[i];
  98.                 unsort_feld[i] = unsort_feld[j];
  99.                 unsort_feld[j] = swap;
  100.             }
  101.             mem.push(right);
  102.             right = max(left,i-1);
  103.         }
  104.         else
  105.         {
  106.             if (mem.empty() == true) break;
  107.             left = right + 1;
  108.             right = mem.top();
  109.             mem.pop();
  110.            
  111.         }
  112.     }
  113.  
  114.     //Ausgabe der sortierten Liste
  115.     for (unsigned int m=0; m<unsort_feld.size(); ++m)
  116.     {
  117.         cout << unsort_feld[m] << endl;
  118.     }
  119.    
  120. }
  121.  
  122. int main()
  123. {
  124.     cout << "Möchtest du eine Liste von Zufallszahlen erzeugen (1) oder einlesen (2)?" << endl;
  125.     int generate_or_read=1;
  126.     //cin >> generate_or_read;
  127.    
  128.     //initialisiere random seed
  129.     srand (time(NULL) );
  130.    
  131.     vector<double> unsort_feld;
  132.     try
  133.     {
  134.         if (generate_or_read == 1) unsort_feld = generate_func();
  135.         else if (generate_or_read == 2) unsort_feld = input_func();
  136.         else throw 1;
  137.     }
  138.     catch(int e)
  139.     {
  140.         if (e==404) cout << "Konnte Datei list.txt nicht öffnen!" << endl;
  141.         else if (e==1) cout << "Falsche Eingabe! Programm wird beendet." << endl;
  142.         return 1;
  143.     }
  144.     cout << "Beginne Quicksort"<<endl;
  145.     quick_sort(unsort_feld);
  146.  
  147.     return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement