Translations of this page:

Bogosort

Beschreibung

Bogosort ist ein sehr beliebter Sortieralgorithmus. Statt die richtige Reihenfolge der Elemente aufwändig zu berechnen werden sie einfach so lange zufällig sortiert, bis es passt.

Eigenschaften

  • günstigste Laufzeit: Ω(n)
  • schlechteste Laufzeit: O(∞)

Benötigt

Code

#include <iostream>
#include <vector>
#include <algorithm> /* qsort() */
#include <ctime>     /* time() */
#include <sstream>
 
class BogoSort
{
 private:
    void print(std::vector<int>&);
 
 public:
    void bsort(std::vector<int>&);
};
 
//! print vector elements
void BogoSort::print(std::vector<int> &vec)
{
 for(std::vector<int>::iterator it = vec.begin(); it != vec.end(); it++)
 {
    std::cout << *it << " ";
 }
 
 std::cout << std::endl;
}
 
//! bogosort vector
void BogoSort::bsort(std::vector<int> &vec)
{
 std::cout << "unsorted: ";
 print(vec);
 
 std::vector<int> sorted = vec;
 sort(sorted.begin(), sorted.end());
 
 std::vector<int> bogosorted;
 int pos, num = 0;
 
 while(bogosorted != sorted)
 {
    bogosorted.clear();
    vec = sorted;
 
    int size = vec.size();
    for(int i = 0; i < size; i++)
    {
        pos = rand() % vec.size();     /* choose random element */
        bogosorted.push_back(vec[pos]);/* add to bogosort vector */
        vec.erase(vec.begin() + pos);  /* remove from available elements */
    }
 
    std::cout << "bogosort run " << ++num << ": ";
    print(bogosorted);
 }
 
 std::cout << "sorted: ";
 print(sorted);
 std::cout << std::endl;
}
 
int main(int argc, char *argv[])
{
 if (argc == 1)
 {
    std::cout << "Usage  : " << argv[0] << " NUMBERS\n\n"
              << "example: " << argv[0] << " 5 2 8 3\n";
    return 1;
 }
 
 srand(time(0));
 
 std::vector<std::string> args(argv, argv + argc);
 std::vector<std::string>::iterator it = args.begin();
 
 ++it;  /* ignore argv[0] */
 
 std::vector<int> vec;
 int num;
 
 while (it != args.end())
 {
    std::stringstream strstr(*it);
    strstr >> num;
    vec.push_back(num);
    ++it;
 }
 
 
 BogoSort bsort;
 bsort.bsort(vec);
 
 return 0;
}

mittlere Laufzeit

Anzahl der Sortierversuche bei je 10 Durchläufen.

Anzahl Elemente Mittelwert Min Max
5 98.2 2 293
8 33240.3 2198 67859
10 3042537.3 1368590 5850993
12 124231721.3 2823229 532764830
 
scytheman/zeugs/code/bogosort.txt · Zuletzt geändert: 2008/01/31 10:19 von scytheman
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki