2013-04-02 3 views
-4

Я ищу эффективный способ сортировки массива двойников. Я знаю сортировку сортов и сортировку пузырьков, ни одна из них не кажется достаточно быстрой. Я читал о быстрой сортировке, но я не понимаю, как это работает. Существует множество примеров исходных кодов, но все они плохо комментируются. Может кто-нибудь объяснить это мне?Как эффективно сортировать массив двойников без библиотек?

+0

Вы уже изучили бинарные деревья? – CookieOfFortune

+3

"* Может кто-нибудь, пожалуйста, покажет реализацию *« Это не очень хорошее использование переполнения стека ** или ** домашнее задание. –

+0

Сортировка и сортировка пузырьков - это алгоритмы 'O (n^2)' примерно так же медленны, как сортировка может (разумно) быть. Существует множество гораздо более быстрых алгоритмов O (n log (n)) '; [Википедия] (http://en.wikipedia.org/wiki/Sorting_algorithm) является хорошей отправной точкой для ваших исследований. [Merge sort] (http://en.wikipedia.org/wiki/Merge_sort) - популярный выбор. –

ответ

1

Я написал это после того, как понял, как работает qsort. Я действительно думаю, что qsort не так-то просто понять. Это, вероятно, нуждается в некоторой оптимизации, и, вероятно, нет, где по сравнению с оригинальным qsort, но вот оно. Спасибо за пепел, который пытался помочь с этим.

/*recursive sorting, throws smaller values to left, 
bigger to right side, than recursively sorts the two sides.*/ 
void sort(double szam[], int eleje, int vege){ 
    if (vege > eleje + 1){   //if I have at least two numbers 
    double kuszob = szam[eleje]; //compare values to this. 
    int l = eleje + 1;    //biggest index that is on the left. 
    int r = vege;     //smallest index that is on the right side. 
    while (l < r){     //if I haven't processed everything. 
     if (szam[l] <= kuszob) l++; //good, this remains on the left. 
     else 
     swap(&szam[l], &szam[--r]); //swap it with the farthest value we haven't checked. 
    } 
    swap(&szam[--l], &szam[eleje]); //make sure we don't compare to this again, that could cause STACK OVERFLOW 
    sort(szam, eleje, l);   //sort left side 
    sort(szam, r, vege);   //sort right side 
    } 
    return;       //if I have 1 number break recursion. 
} 
Смежные вопросы