You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.3 KiB
43 lines
1.3 KiB
#include "bucket.h"
|
|
|
|
void MergeSort(Bucket *liste[], int groesse){
|
|
|
|
if(groesse > 1){
|
|
|
|
Bucket *haelfte1[groesse/2];
|
|
Bucket *haelfte2[(groesse + 1)/2];
|
|
int i;
|
|
for(i = 0; i < groesse/2; ++i)
|
|
haelfte1[i] = liste[i];
|
|
for(i = groesse/2; i < groesse; ++i)
|
|
haelfte2[i - groesse/2] = liste[i];
|
|
|
|
MergeSort(haelfte1,groesse/2);
|
|
MergeSort(haelfte2,(groesse + 1)/2);
|
|
|
|
Bucket **pos1 = &haelfte1[0];
|
|
Bucket **pos2 = &haelfte2[0];
|
|
for(i = 0; i < groesse; ++i){
|
|
if((*pos1)->depth <= (*pos2)->depth){
|
|
liste[i] = *pos1;
|
|
if (pos1 != &haelfte2[(groesse+1)/2 - 1]) { // pos1 nicht verändern, wenn der größte Wert mehrmals vorkommt
|
|
if(pos1 == &haelfte1[groesse/2 - 1]){
|
|
pos1 = &haelfte2[(groesse+1)/2 - 1];
|
|
}
|
|
else{
|
|
++pos1;
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
liste[i] = *pos2;
|
|
if(pos2 == &haelfte2[(groesse + 1)/2 - 1]){
|
|
pos2 = &haelfte1[groesse/2 - 1];
|
|
}
|
|
else{
|
|
++pos2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |