?

Log in

No account? Create an account
 
 
07 Декабрь 2011 @ 05:59
Стыд  
Долго мучился и, в итоге, написал программу для быстрой сортировки:

void qsort_recur (int start, int end)
{
    int i; int j; int ch; int a; int k;

    a=C[start];
    i=start-1;
    j=end;
    ch=N+1;

    while (i<j) {
    i++;
        while (j>i && C[i]>=a) {
            if (C[j]<a) {
                ch=C[i];
                C[i]=C[j];
                C[j]=ch;
            }
        j--;
        }
    }
    if (ch==(N+1)) {i=start+1;}


    if (start<i-1 || C[start]>C[i]) {qsort_recur(start, i);}
    if (i+1<end || C[i]>C[end]) {qsort_recur(i, end);}
}

Всё работает, ура, моя рада! :о) Вот только мне кажется, что у меня есть немножко лишний край в последних рекурсиях... Но это мелочи. Когда задача решена - можно и посмотреть как решают её по-человечески...

void quickSortR(T* a, long N) {
{
long i = 0, j = N;
T temp, p;

p = a[ N>>1 ];

do {
while ( a[i] < p ) i++;
while ( a[j] > p ) j--;

if (i <= j) {
temp = a[i]; a[i] = a[j]; a[j] = temp;
i++; j--;
}
} while ( i<=j );


if ( j > 0 ) quickSortR(a, j);
if ( N > i ) quickSortR(a+i, N-i)

Прям даже стыдно, что не допёр :о( Так просто и красиво... Не то ч то у меня, всё через жопу :о)