Hab letztens in Informatik langeweile gehabt und habe in dieser unendlichen hoffnungslosigkeit ein algorithmisches wunderwerk fabriziert: den Randomsort! :badgrin:
die Idee: möglichst viel rechenzeit zu beanspruchen, also möglichst ineffizient zu arbeiten
lösung: zufallszahlen.
prinzip: als erstes wird geprüft, ob das feld sortiert ist. wenn das nicht der fall ist werden zwei zufallszahlen erzeugt und die elemente mit den entsprechenden indices vertauscht. danach wird wieder auf sortiertheit geprüft usw.
hier der source(auf das wesentliche reduziert):
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
bool isSorted(std::vector<int> &Feld)
{
for(std::vector::size_type i=0;i<Feld.size()-1;i++)
{
if (Feld[i] > Feld[i+1]) return false;
}
return true;
}
void randomSort(std::vector<int> &Feld)
{
while (!isSorted(Feld))
{
int pos1 = (Feld.size()-1) * ((int)rand()) / RAND_MAX;
if (pos1 > Feld.size()-1) pos1 = 0;
int pos2 = (Feld.size()-1) * ((int)rand()) / RAND_MAX;
if (pos2 > Feld.size()-1) pos2 = 0;
Feld.swap(pos1,pos2);
}
}
|
bei weiteren ideen zur perfektion des agorithmus (und evtl. fehler weil ich das eigl in TP geschrieben habe) postet wat das zeug hält!